web-dev-qa-db-fra.com

Changer la clé primaire par défaut dans Eloquent

Puis-je changer la clé primaire du modèle Eloquent? 

Je veux définir la clé primaire par exemple admin_id au lieu de 'id'?

Je sais que je peux changer le nom de la table pour un modèle comme 

protected $table = "admin";

Y a-t-il quelque chose de similaire pour la clé primaire?

69
Vuk Stanković

Oui 

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}
154
phirschybar
class User extends Eloquent {

    protected $primarykey = 'admin_id';

}

mais

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

notez la lettre K (capital) sur la variable $ primaryKey

12
user3186817

La variable de clé primaire est sensible à la casse et doit être $primaryKey pour fonctionner.

Exemple:

protected $primaryKey = 'your_primary_key_id';

Exemple dans une classe de modèle:

class User extends Eloquent {

    protected $primaryKey = 'your_primary_key_id';

}
7
ajtrichards
class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

Selon la documentation de Laravel:


Eloquent supposera également que chaque table a une colonne de clé primaire nommée id. Vous pouvez définir une propriété $primaryKey pour remplacer cette convention.

De plus, Eloquent suppose que la clé primaire est une valeur entière incrémentée, ce qui signifie que par défaut, la clé primaire est convertie automatiquement en int. Si vous souhaitez utiliser une clé primaire non incrémentée ou non numérique, vous devez définir la propriété public $incrementing sur votre modèle sur false.

1
Gammer

Si vous souhaitez utiliser une clé composite (une chaîne)

Vous devez vous assurer que vous avez défini public $incrementing = false sinon laravel convertira le champ en un entier, donnant 0

class User extends Model {

    protected $primaryKey = 'my_string_key';
    public $timestamp = false;

}
0
Toby Mellor