Maison >base de données >tutoriel mysql >Comment éviter les valeurs zéro lors de l'utilisation de clés primaires de chaîne personnalisées dans les modèles éloquents Laravel 5.2 ?

Comment éviter les valeurs zéro lors de l'utilisation de clés primaires de chaîne personnalisées dans les modèles éloquents Laravel 5.2 ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-26 11:06:13416parcourir

How to Avoid Zero Values When Using Custom String Primary Keys in Laravel 5.2 Eloquent Models?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn