Ich versuche, E-Mail als Primärschlüssel für meine Tabelle zu verwenden. Mein beredter Code lautet also:
<?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 mache-
UserVerification::where('verification_token', $token)->first();
Ich bekomme das-
{
"email": "[email protected]",
"verification_token": 0,
"created_at": "2016-01-03 22:27:44",
"updated_at": "2016-01-03 22:27:44"
}
Das Bestätigungstoken / der Primärschlüssel wird also zu 0.
Kann mir bitte jemand helfen?
$incrementing
Feld öffentlich statt geschützt ist?$incrementing
öffentlich und$primaryKey
geschützt? Es ist ziemlich willkürlich. Ich vermute, dass$incrementing
es in früheren Versionen von Eloquent keine Getter- oder Setter-Methoden gab (das tut es jetzt), und sie wollten einfach keine bahnbrechende Änderung vornehmen, nachdem sie sie hinzugefügt hattenchunk
, kann der folgende Fehler auftreten :SQLSTATE[42S22]: Column not found: 1054 Unknown column 'example.' in 'order clause'
. In diesem Fall müssen Sie dieorderBy
Anweisung explizit definieren , die Eloquent mit dem Primärschlüssel an Ihre Abfrage anhängen möchte.Auf dem Modell
$incrementing
auf false gesetztpublic $incrementing = false;
Dies verhindert, dass es sich um ein Auto-Inkrement-Feld handelt.
Laravel Docs - Eloquent - Modelle definieren
quelle
Es gibt zwei Eigenschaften für das Modell, die Sie festlegen müssen. Der erste
$primaryKey
, der dem Modell mitteilt, in welcher Spalte der Primärschlüssel zu erwarten ist. Der zweite,$incrementing
damit er weiß, dass der Primärschlüssel kein linearer Wert für die automatische Inkrementierung ist.class MyModel extends Model { protected $primaryKey = 'my_column'; public $incrementing = false; }
Weitere Informationen finden Sie im
Primary Keys
Abschnitt in der Dokumentation zu Eloquent .quelle
public $incrementing
der übergeordneten Klasse übereinstimmen.Ich habe Postman verwendet, um meine Laravel-API zu testen.
Ich habe einen Fehler erhalten, der besagt
Ich musste
public $timestamps = false;
mein Modell eingeben . Dann habe ich nochmal mit Postman getestet und gesehen, dass ein"id" = 0
Variable in meiner Datenbank erstellt wurde.Ich musste endlich hinzufügen
public $incrementing false;
, um meine API zu reparieren.quelle
Verwenden Sie 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 erhalte die E-Mail:
quelle