Skip to content

HasOne (1:n)

todo

Modellierung

Eine 1:n-Beziehung wird im ORM durch zwei Bestandteile modelliert.

  • In Model A ein ForeignKey auf Model B, der nullable ist.
  • In Model B eine HasMany-Beziehung auf Model A.

Deklaration

Eine HasMany-Beziehung wird mit der Methode hasMany der Klasse Table erstellt.

php
hasMany(string $name, string $target, string $fk = null): HasMany
  • Der Parameter $name definiert den Namen der Eigenschaft, mit der auf die Beziehung zugegriffen wird.
  • Der Parameter $target erwartet den Klassennamen des referenzierten Models (hier Model A).
  • Der Parameter $fk spezifiert die Fremdschlüsselspalte in Model A. Standardmäßig wird der Tabellenname von Model B mit dem Suffix _id verwendet.

Beispiel

Folgendes Beispiel zeigt eine 1:n-Beziehung zwischen den Models Product und Category. Jedes Produkt ist also höchstens einer Kategorie zugeordnet (0..1) und jede Kategorie kann beliebig viele Produkte enthalten (0..*).

php
class Product extends Model
{
    protected static function init(Table $table): void
    {
        $table->setColumns([
            'category_id' => Column::fk(Category::class)->nullable(),
            // ...
        ]);
    }
}
php
class Category extends Model
{
    protected static function init(Table $table): void
    {
        $table->setColumns([
            // ...
        ]);
        
        $table->hasMany('products', Product::class);
    }
}

Nutzung

todo