Modifier la clé primaire par défaut dans Eloquent

92

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

Je veux définir la clé primaire par exemple admin_idau lieu de «id»?

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

protected $table = "admin";

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

Vuk Stanković
la source

Réponses:

190

Oui

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}
phirschybar
la source
16
Pour toute autre personne faisant référence à cette question, utilisez l'une des autres réponses. $primarykeydevrait être $primaryKey(lettre majuscule K) et ne fonctionnera pas autrement.
Jeremy Harris
4
Que faire si j'ai plusieurs champs comme clé primaire?
Bagusflyer
@bagusflyer Vous plaisantez, non? Plus d'une clé primaire dans une table de base de données?
Novica89
@bagusflyer Eloquent ne prend pas en charge les clés composites, mais voici une bonne solution de contournement pour que vous puissiez avoir $primaryKey = array('key1', 'key1'); github.com/laravel/framework/issues/5517#issuecomment-52996610
mopo922
Juste pour info, il semble que dans Laravel 5.4, vous n'avez plus besoin de définir votre propre PK si c'est le même que le nom du modèle car il l'ajoute pour vous (et l'erreur dans le cas contraire).
État neuf le
14
class User extends Eloquent {

    protected $primarykey = 'admin_id';

}

mais

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

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

user3186817
la source
9

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

Vous devez vous assurer que vous définissez public $incrementing = falsesinon laravel convertira le champ en un entier, ce qui donne0

class User extends Model {

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

}
Toby Mellor
la source
J'ai fait un remplacement sur le primaryKey en tant que chaîne de texte col - la valeur de la collection était correcte mais quand j'ai référencé le col comme $ results-> primary_key, il ne retournait que zéro bien que la collection / tableau ait montré la chaîne correcte - a pris un certain temps pour traquez-le quand j'ai remarqué que la primaryKey montrait comme INT et incrémentable dans l'objet. J'ai dû définir public $ incrementing = false.
G-Man le
7

La variable de clé primaire est sensible à la casse et doit $primaryKeyfonctionner.

Exemple:

protected $primaryKey = 'your_primary_key_id';

Exemple dans une classe Model:

class User extends Eloquent {

    protected $primaryKey = 'your_primary_key_id';

}
ajtrichards
la source
1
Dois-je encore l'ajouter au tableau $ fillable?
Anis
1
class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

Selon la documentation Laravel:


Eloquent supposera également que chaque table a une colonne de clé primaire nommée id. Vous pouvez définir une $primaryKeypropriété 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 sera automatiquement convertie en un entier. Si vous souhaitez utiliser une clé primaire non incrémentielle ou non numérique, vous devez définir la $incrementingpropriété publique de votre modèle sur false.

Vieille femme
la source
-3

Pour attribuer une clé primaire, vous devez ..->

class User extends Eloquent {

    protected $primaryKey='admin_id';

 }
Jay Momaya
la source