Heim > Artikel > PHP-Framework > Laravel meldet, dass kein Primärschlüssel vorhanden ist
Bei der Verwendung von Laravel für Datenbankoperationen stößt man manchmal auf ein häufiges Problem: kein Primärschlüssel. Dies liegt daran, dass im Standardmodell von Laravel automatisch davon ausgegangen wird, dass der Primärschlüssel id ist. Wenn in der Datenbank kein ID-Feld vorhanden ist oder das Feld nicht als Primärschlüssel festgelegt ist, wird die Fehlermeldung angezeigt, dass kein Primärschlüssel vorhanden ist.
Wie kann man also das Problem lösen, dass kein Primärschlüssel vorhanden ist? Die Lösungen werden aus der Perspektive der Datenbank bzw. des Laravel-Modells vorgestellt.
1. Datenbanklösung
In der MySQL-Datenbank können Sie ALTER verwenden TABLE-Anweisung zum Ändern der Struktur der Tabelle, einschließlich der Festlegung des Primärschlüssels. Beispiel:
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
Darunter müssen der Tabellenname und der Feldname durch Sie selbst ersetzt werden.
Wenn in der Datenbank kein passendes Primärschlüsselfeld vorhanden ist, können Sie das Problem lösen, indem Sie ein neues erstellen Primärschlüsselfeld. Beispiel:
ALTER TABLE 表名 ADD 字段名 INT AUTO_INCREMENT PRIMARY KEY;
Darunter müssen der Tabellenname und der Feldname durch Sie selbst ersetzt werden. AUTO_INCREMENT gibt an, dass das Feld automatisch inkrementiert wird.
2. Laravel-Modelllösung
Im Laravel-Modell können Sie $primaryKey übergeben Eigenschaften zum Anpassen des Primärschlüssels. Beispiel:
class User extends Model { protected $primaryKey = 'user_id'; }
Hier ist der Primärschlüssel auf user_id gesetzt.
Wenn Sie einen nicht automatisch inkrementierenden Primärschlüssel verwenden, müssen Sie die $Inkrementierung festlegen Attribut auf „false“ setzen, um die automatische Inkrementierung des Primärschlüssels zu deaktivieren. Beispiel:
class Product extends Model { public $incrementing = false; }
In einigen spezifischen Szenarios müssen Sie den Primärschlüsselwert möglicherweise manuell angeben. Dies kann durch Festlegen der Eigenschaften $keyType und $fillable im Modell erreicht werden. Beispiel:
class Order extends Model { protected $keyType = 'string'; protected $fillable = ['order_id', 'product_name']; }
Hier wird der Primärschlüsseltyp auf String gesetzt und ausfüllbare Felder definiert.
Zusammenfassung
Mit der oben genannten Methode können Sie das Problem lösen, dass im Laravel-Modell kein Primärschlüssel vorhanden ist. In der tatsächlichen Entwicklung können entsprechende Methoden entsprechend den spezifischen Anforderungen ausgewählt werden. Gleichzeitig muss auf die Eindeutigkeit des Primärschlüssels geachtet werden, um mögliche Konflikte zu vermeiden.
Das obige ist der detaillierte Inhalt vonLaravel meldet, dass kein Primärschlüssel vorhanden ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!