J'essaie d'utiliser le courrier électronique comme clé primaire de ma table, alors mon code éloquent est-
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class UserVerification extends Model
{
protected $table = 'user_verification';
protected $fillable = [
'email',
'verification_token'
];
//$timestamps = false;
protected $primaryKey = 'verification_token';
}
Et mon DB est comme ça-
mais si je fais ça-
UserVerification::where('verification_token', $token)->first();
Je reçois ceci-
{
"email": "[email protected]",
"verification_token": 0,
"created_at": "2016-01-03 22:27:44",
"updated_at": "2016-01-03 22:27:44"
}
Ainsi, le jeton de vérification / (0) devient la clé primaire .
Quelqu'un peut-il aider s'il vous plait?
C'était ajouté à la documentation de la mise à niveau le 29 décembre 2015 , donc si vous avez effectué une mise à niveau avant, vous l'avez probablement manquée.
Lors de l'extraction d'un attribut du modèle, il vérifie si cette colonne doit être convertie en entier, chaîne, etc.
Par défaut, pour les tables auto-incrémentées, l'ID est supposé être un entier dans cette méthode:
https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/Eloquent/Model.php#L279
La solution est donc:
class UserVerification extends Model
{
protected $primaryKey = 'your_key_name'; // or null
public $incrementing = false;
}
Sur le modèle, définissez $incrementing
sur false
public $incrementing = false;
Cela l'empêchera de penser qu'il s'agit d'un champ à incrémentation automatique.
Il y a deux propriétés sur le modèle que vous devez définir. Le premier $primaryKey
indique au modèle la colonne sur laquelle la clé primaire doit être attendue. Le second $incrementing
pour qu'il sache que la clé primaire n'est pas une valeur d'incrémentation automatique linéaire.
class MyModel extends Model
{
protected $primaryKey = 'my_column';
public $incrementing = false;
}
Pour plus d'informations, voir la section Primary Keys
dans documentation sur Eloquent .
J'utilisais Postman pour tester mon API Laravel.
J'ai reçu une erreur qui dit
"SQLSTATE [42S22]: Colonne introuvable: 1054 Colonne inconnue" car Laravel tentait de créer automatiquement deux colonnes "created_at" et "updated_at".
Je devais entrer public $timestamps = false;
dans mon modèle. Ensuite, j'ai de nouveau testé avec Postman et constaté qu'une variable "id" = 0
était en cours de création dans ma base de données.
J'ai finalement dû ajouter public $incrementing false;
pour réparer mon API.
continue à utiliser l'identifiant
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class UserVerification extends Model
{
protected $table = 'user_verification';
protected $fillable = [
'id',
'email',
'verification_token'
];
//$timestamps = false;
protected $primaryKey = 'verification_token';
}
et recevez l'email:
$usr = User::find($id);
$token = $usr->verification_token;
$email = UserVerification::find($token);