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