Laravel 5.2 : Clé primaire personnalisée pour une table éloquente - Éviter les valeurs nulles
Dans Laravel 5.2, utiliser une chaîne comme clé primaire personnalisée pour une table Eloquent peut entraîner un comportement inattendu : la valeur de la clé primaire devient zéro (0). Pour résoudre ce problème, il est essentiel de comprendre un aspect spécifique du mécanisme de conversion d'attributs du modèle Eloquent.
Par défaut, Eloquent tente de convertir des attributs spécifiques en leurs types de données appropriés. Pour les tables à incrémentation automatique, l'ID est supposé être un nombre entier. Cependant, lors de l'utilisation d'une chaîne comme clé primaire, ce casting entraîne une conversion incorrecte de la valeur de la clé en 0.
Pour résoudre ce problème, trois stratégies peuvent être utilisées :
Méthode 1 : désactiver l'incrémentation
La définition de la propriété $incrementing sur false dans la classe modèle indique que la clé primaire de la table n'est pas auto-incrémentation. Cela indique à Eloquent de ne pas appliquer la conversion d'entier à la clé primaire.
class UserVerification extends Model { protected $primaryKey = 'verification_token'; public $incrementing = false; }
Méthode 2 : spécifier la clé d'incrémentation
Dans les cas où la clé primaire du modèle est un nombre entier , même s'il ne s'incrémente pas automatiquement, définir $incrementing sur false peut ne pas être approprié. Au lieu de cela, spécifiez le type de données de la clé primaire à l'aide de la propriété $keyType.
class UserVerification extends Model { protected $primaryKey = 'verification_token'; protected $keyType = 'string'; }
Méthode 3 : convertir explicitement la clé primaire
Une approche alternative consiste à convertir explicitement la clé primaire. convertissez la clé primaire en une chaîne dans la requête Eloquent elle-même. Cela garantit que la clé primaire est traitée comme une chaîne, quels que soient les paramètres par défaut du modèle.
UserVerification::where('verification_token', (string) $token)->first();
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!