HasOne (1:1
)
todo
Modellierung
Eine 1:1
-Beziehung wird im ORM durch zwei Bestandteile modelliert.
- In Model A ein ForeignKey auf Model B, der nicht
nullable
ist. - In Model B eine
HasOne
-Beziehung auf Model A.
Deklaration
Eine HasOne
-Beziehung wird mit der Methode hasOne
der Klasse Table
erstellt.
php
hasOne(string $name, string $target, string $fk = null): HasOne
- 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:1
-Beziehung zwischen den Models Profile
und User
. Jedes Profil ist also genau einem Benutzer zugeordnet (1..1
) und jeder Benutzer kann höchstens ein Profil haben (0..1
).
php
class Profile extends Model
{
protected static function init(Table $table): void
{
$table->setColumns([
'user_id' => Column::fk(User::class),
// ...
]);
}
}
php
class User extends Model
{
protected static function init(Table $table): void
{
$table->setColumns([
// ...
]);
$table->hasOne('profile', Profile::class);
}
}
Nutzung
todo