Laravel 5.2: Benutzerdefinierter Primärschlüssel für eloquente Tabellen – Vermeidung von Nullwerten
In Laravel 5.2 wird eine Zeichenfolge als benutzerdefinierter Primärschlüssel für verwendet Eine Eloquent-Tabelle kann zu einem unerwarteten Verhalten führen: Der Wert des Primärschlüssels wird Null (0). Um dieses Problem zu lösen, ist es wichtig, einen bestimmten Aspekt des Attributumwandlungsmechanismus des Eloquent-Modells zu verstehen.
Standardmäßig versucht Eloquent, bestimmte Attribute in die entsprechenden Datentypen umzuwandeln. Bei automatisch inkrementierenden Tabellen wird davon ausgegangen, dass die ID eine Ganzzahl ist. Wenn jedoch eine Zeichenfolge als Primärschlüssel verwendet wird, führt diese Umwandlung zu einer falschen Konvertierung des Schlüsselwerts in 0.
Um dieses Problem zu lösen, können drei Strategien angewendet werden:
Methode 1: Inkrementierung deaktivieren
Das Festlegen der Eigenschaft $incrementing in der Modellklasse auf „false“ zeigt an, dass der Primärschlüssel der Tabelle nicht vorhanden ist automatische Inkrementierung. Dadurch wird Eloquent angewiesen, keine Ganzzahlumwandlung auf den Primärschlüssel anzuwenden.
class UserVerification extends Model { protected $primaryKey = 'verification_token'; public $incrementing = false; }
Methode 2: Inkrementierungsschlüssel angeben
In Fällen, in denen der Primärschlüssel des Modells eine Ganzzahl ist Auch wenn es sich nicht um eine automatische Inkrementierung handelt, ist es möglicherweise nicht angemessen, $incrementing auf „false“ zu setzen. Geben Sie stattdessen den Datentyp des Primärschlüssels mithilfe der Eigenschaft $keyType an.
class UserVerification extends Model { protected $primaryKey = 'verification_token'; protected $keyType = 'string'; }
Methode 3: Primärschlüssel explizit umwandeln
Ein alternativer Ansatz ist die explizite Umwandlung Wandeln Sie den Primärschlüssel in eine Zeichenfolge innerhalb der Eloquent-Abfrage selbst um. Dadurch wird sichergestellt, dass der Primärschlüssel unabhängig von den Standardeinstellungen des Modells als Zeichenfolge behandelt wird.
UserVerification::where('verification_token', (string) $token)->first();
Das obige ist der detaillierte Inhalt vonWie vermeide ich Nullwerte bei der Verwendung benutzerdefinierter String-Primärschlüssel in Laravel 5.2 Eloquent-Modellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!