Ich versuche, E-Mail als Primärschlüssel für meine Tabelle zu verwenden, daher lautet mein beredter Code:
<?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';
}
Und meine DB ist so-
aber wenn ich das tue-
UserVerification::where('verification_token', $token)->first();
Ich verstehe das-
{
"email": "[email protected]",
"verification_token": 0,
"created_at": "2016-01-03 22:27:44",
"updated_at": "2016-01-03 22:27:44"
}
Daher wird der Verifizierungstoken / Primärschlüssel zu 0.
Kann jemand bitte helfen?
Dies war hinzugefügt zu der Upgrade-Dokumentation am 29. Dezember 2015 . Wenn Sie also zuvor ein Upgrade durchgeführt haben, haben Sie es wahrscheinlich verpasst.
Beim Abrufen eines Attributs aus dem Modell wird überprüft, ob diese Spalte als Ganzzahl, Zeichenfolge usw. umgewandelt werden soll.
Standardmäßig wird für automatisch inkrementierende Tabellen angenommen, dass die ID in dieser Methode eine Ganzzahl ist:
https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/Eloquent/Model.php#L279
Die Lösung lautet also:
class UserVerification extends Model
{
protected $primaryKey = 'your_key_name'; // or null
public $incrementing = false;
}
Auf dem Modellsatz $incrementing
auf false
public $incrementing = false;
Dies verhindert, dass es sich um ein Auto-Inkrement-Feld handelt.
Es gibt zwei Eigenschaften für das Modell, die Sie festlegen müssen. Der Erste $primaryKey
, um dem Modell mitzuteilen, für welche Spalte der Primärschlüssel erwartet werden soll. Der Zweite $incrementing
Der Primärschlüssel ist also kein linearer Wert für die automatische Inkrementierung.
class MyModel extends Model
{
protected $primaryKey = 'my_column';
public $incrementing = false;
}
Weitere Informationen finden Sie in der Primary Keys
Abschnitt in der Dokumentation zu Eloquent .
Ich habe Postman verwendet, um meine Laravel API zu testen.
Ich habe einen angegebenen Fehler erhalten
"SQLSTATE [42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte", da Laravel versuchte, automatisch zwei Spalten "created_at" und "updated_at" zu erstellen.
Ich musste public $timestamps = false;
In mein Modell eingeben. Dann habe ich erneut mit Postman getestet und festgestellt, dass eine "id" = 0
- Variable in meiner Datenbank erstellt wurde.
Ich musste schließlich public $incrementing false;
Hinzufügen, um meine API zu reparieren.
benutze weiterhin die ID
<?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';
}
und bekomme die email:
$usr = User::find($id);
$token = $usr->verification_token;
$email = UserVerification::find($token);