Skip to content

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 ist Restrict.
OnDeleteBeschreibung
RestrictDas Löschen eines Datensatzes der referenzierten Tabelle wird verhindert, solange dessen Primärschlüssel in der Fremdschlüsselspalte vorhanden ist.
SetNullDie Fremdschlüsselspalte wird beim Löschen des referenzierten Datensatzes auf den Wert NULL gesetzt.
CascadeReferenzierende 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