Skip to content

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