Maison > base de données > tutoriel mysql > le corps du texte

Pourquoi la clé primaire de chaîne de mon modèle éloquent Laravel 5.2 devient-elle 0 ?

Susan Sarandon
Libérer: 2024-11-22 02:25:15
original
443 Les gens l'ont consulté

Why Does My Laravel 5.2 Eloquent Model's String Primary Key Become 0?

Laravel 5.2 : Résoudre la perte de clé primaire lors de l'utilisation d'une chaîne

Lorsque vous tentez d'utiliser une chaîne personnalisée comme clé primaire pour une table Eloquent dans Laravel 5.2, la clé primaire la valeur clé peut étonnamment devenir 0. Ce comportement peut être déroutant et frustrant.

Voyons explorez le problème et trouvez une solution :

Description du problème

Vous disposez d'une table avec une clé primaire basée sur une chaîne et vous utilisez Eloquent pour interagir avec la base de données. Lorsque vous récupérez un enregistrement à l'aide de first() en fonction de la clé primaire, la valeur de la clé primaire devient 0 dans l'objet résultant.

Cause première

Le problème réside dans le comportement par défaut de Laravel pour l'auto- incrémentation des clés primaires. Par défaut, Laravel suppose que la clé primaire est un entier. Lors de la récupération des attributs du modèle, il vérifie si la colonne correspondante doit être convertie en nombre entier. Puisque votre clé primaire est une chaîne, ce processus de conversion modifie la valeur à 0.

Solution

Pour résoudre ce problème, vous devez spécifier explicitement que votre clé primaire n'est pas auto-incrémentée et doit être traité comme une chaîne. Pour ce faire, ajoutez les lignes suivantes à votre classe de modèle Eloquent :

protected $primaryKey = 'your_key_name';  // Your primary key name
public $incrementing = false;  // Disable auto-incrementing
Copier après la connexion

Pour Laravel 6.0 et supérieur :

En plus de ce qui précède, vous avez également besoin pour définir la propriété $keyType sur 'string' :

protected $keyType = 'string';
Copier après la connexion

Avec ces paramètres, Laravel traitera correctement votre clé primaire comme une chaîne et évitez la conversion erronée en entier.

Considérations supplémentaires

Horodatage :

Si votre table n'a pas d'horodatage, vous devez définir $ les horodatages sont définis sur false dans votre modèle pour éviter les problèmes liés aux horodatages définis sur '0000-00-00 00:00:00'.

$timestamps = false;
Copier après la connexion

Exemple :

Voici un exemple mis à jour d'un modèle avec une clé primaire de chaîne à incrémentation non automatique :

namespace App;

use Illuminate\Database\Eloquent\Model;

class UserVerification extends Model
{
    protected $table = 'user_verification';
    protected $fillable = ['email', 'verification_token'];
    //$timestamps = false;  // If your table doesn't have timestamps
    protected $primaryKey = 'verification_token';
    public $incrementing = false;
    protected $keyType = 'string';  // For Laravel 6.0+
}
Copier après la connexion

Avec ces changements, vous devriez désormais pouvoir travailler avec succès avec une clé primaire basée sur une chaîne dans Laravel 5.2 sans que la valeur de la clé primaire soit réinitialisée à 0.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal