ForeignKey
Fremdschlüssel bilden die Grundlage für alle anderen Beziehungsarten. Sie sind zugleich die einzige Art von Beziehung, die nicht nur im Code, sondern auch in der Datenbank definiert wird, sofern diese FOREIGN KEY
-Constraints unterstützt.
Deklaration
Eine ForeignKey
-Beziehung wird mit der Methode Column::fk
als Tabellenspalte definiert.
php
fk(string $target, OnDelete $onDelete = OnDelete::Restrict): ForeignKeyColumn
- Der Parameter
$target
erwartet den Klassennamen des referenzierten Models. - Der Parameter
$onDelete
definiert das Verhalten für den Fall, dass Datensätze der referenzierten Tabelle gelöscht werden. Die folgende Tabelle beschreibt die drei möglichen Werte. Der Standardwert istRestrict
.
OnDelete | Beschreibung |
---|---|
Restrict | Das Löschen eines Datensatzes der referenzierten Tabelle wird verhindert, solange dessen Primärschlüssel in der Fremdschlüsselspalte vorhanden ist. |
SetNull | Die Fremdschlüsselspalte wird beim Löschen des referenzierten Datensatzes auf den Wert NULL gesetzt. |
Cascade | Referenzierende Datensätze werden beim Löschen des referenzierten Datensatzes ebenfalls gelöscht. |
Beispiel
Folgendes Beispiel zeigt eine ForeignKey
-Beziehung von dem Model Product
auf das Model Category
. Jedes Produkt ist also höchstens einer Kategorie zugeordnet (0..1
).
php
class Product extends Model
{
protected static function init(Table $table): void
{
$table->setColumns([
'category_id' => Column::fk(Category::class)->nullable(),
// ...
]);
}
}
Nutzung
todo