Heim >Datenbank >MySQL-Tutorial >Wie vermeide ich Nullwerte bei der Verwendung benutzerdefinierter String-Primärschlüssel in Laravel 5.2 Eloquent-Modellen?

Wie vermeide ich Nullwerte bei der Verwendung benutzerdefinierter String-Primärschlüssel in Laravel 5.2 Eloquent-Modellen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-26 11:06:13401Durchsuche

How to Avoid Zero Values When Using Custom String Primary Keys in Laravel 5.2 Eloquent Models?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn