Maison > développement back-end > tutoriel php > Quand Eloquent convertit-il une clé primaire de chaîne en 0 ?

Quand Eloquent convertit-il une clé primaire de chaîne en 0 ?

Patricia Arquette
Libérer: 2024-10-19 16:55:02
original
327 Les gens l'ont consulté

When Does Eloquent Cast a String Primary Key as 0?

Problème de clé primaire personnalisée éloquente : "verification_token" devient 0

Lors de la tentative d'utilisation d'une chaîne comme clé primaire pour une table éloquente à l'aide Laravel 5.2, un problème inattendu survient lorsque la clé primaire, initialement définie sur un jeton de vérification, est convertie en 0 lors de la récupération des données de la table.

Ce comportement provient de la conversion par défaut des attributs au sein de la classe Modèle Laravel. Pour les tables avec des ID à incrémentation automatique, l'ID est automatiquement converti en nombre entier. Cependant, lorsque la clé primaire est une chaîne, ce processus de conversion entraîne l'interprétation de la clé comme zéro.

Pour résoudre ce problème, apportez les ajustements suivants au modèle Eloquent :

  1. Définissez explicitement la clé primaire à l'aide de $primaryKey :
<code class="php">protected $primaryKey = 'verification_token';</code>
Copier après la connexion
  1. Empêchez l'auto-incrémentation en définissant $incrementing sur false :
<code class="php">public $incrementing = false;</code>
Copier après la connexion
  1. Pour les versions 6.0 ou ultérieures de Laravel, définissez en plus le $keyType :
<code class="php">protected $keyType = 'string';</code>
Copier après la connexion

Ces modifications demandent à Laravel de traiter la clé primaire comme une chaîne plutôt que comme un entier, garantissant qu'elle conserve sa valeur d'origine lors de la récupération des attributs du modèle.

En implémentant ces modifications, vous pouvez utiliser avec succès une chaîne comme clé primaire personnalisée dans votre table Eloquent sans rencontrer le problème de la clé primaire devenant 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
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