Skip to content

Tree (Baum)

Tree-Beziehungen ermöglichen die Modellierung baumartiger bzw. hierarchischer Strukturen innerhalb eines Models.

Modellierung

Eine Tree-Beziehung wird im ORM durch zwei Bestandteile modelliert.

  • Ein ForeignKey auf dasselbe Model.
  • Eine Tree-Beziehung im selben Model.

Deklaration

Eine Tree-Beziehung wird mit der Methode formsTree der Klasse Table erstellt.

php
formsTree(string $parent_fk = 'parent_id', string $children = 'children'): Tree
  • Der Parameter $parent_fk spezifiert die selbstreferentielle Fremdschlüsselspalte. Standardmäßig wird parent_id verwendet.
  • Der Parameter $children definiert den Namen der Eigenschaft, mit der auf die Kindobjekte zugegriffen wird. Standardmäßig wird children verwendet.

Beispiel

Folgendes Beispiel zeigt eine Tree-Beziehung innerhalb des Models Category. Jede Kategorie kann also höchstens eine Elternkategorie haben (0..1) und beliebig viele Kindkategorien (0..*).

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

Nutzung

todo