Zum Ende der Metadaten springen
Zum Anfang der Metadaten

Sie zeigen eine alte Version dieser Seite an. Zeigen Sie die aktuelle Version an.

Unterschiede anzeigen Seitenhistorie anzeigen

« Vorherige Version anzeigen Version 4 Aktuelle »

Generische Relationen

Es gibt seit v5.0 die Möglichkeit Eltern-/Kind-Beziehungen abzubilden. Dazu wurde immer das (heutige) Entity RelationGeneric genutzt. Dieses Entity speichert alle Verknüpfungen in einer zentralen Datentabelle. Das birgt einen Performance-Nachteil, da relativ schnell mehrere millionen Datensätze mit sehr unterschiedlichem Kontext entstehen.

Beispiel
<?php

$repository
  ->getDbalHandler()
  ->getRelationManager(Entity\ParentClass::class, Entity\ChildClass::class)
  ->relate($parentID, [$childID])
;

Dedizierte Relationen

Relationen sind seit v5.6 dedizierte Entities die Eltern-/Kind-Beziehungen zwischen Datensätzen abbilden.
Sie müssen mit dem Tabellenprefix relation versehen werden. Relation-Entities enthalten zwei Konstanten,
die dazu dienen die beiden relevanten Tabellen zu verbinden. Zu beachten:

  • Ableitung von Doctrine\Definition\DedicatedRelationAbstract

  • repositoryClass = Brandbox\Framework\Brandbox\Doctrine\Lib\Repository\DedicatedRelationRepository

Beispiel
<?php

namespace Brandbox\YourApp\YourPackageNamespace\YourPackageName\Lib\Entity {

  use Brandbox\Framework\Brandbox\Doctrine;

  /**
   * @Entity(repositoryClass="Brandbox\Framework\Brandbox\Doctrine\Lib\Repository\DedicatedRelationRepository")
   * @Table(name="relation_me_you")
   *
   **/
  class RelationMeYou extends Doctrine\Definition\DedicatedRelationAbstract
  {
    protected const PARENT_REPOSITORY = ParentEntityClass::class;
    protected const CHILD_REPOSITORY = ChildEntityClass::class;
  }
}

Sobald die Tabelle durch die Installationsroutine bereit gestellt wurde, ist es möglich mit dem RelationManager auf die Relationen zuzugreifen.

Beispiel: Kinder lesen
$this // oder Application\Application::get()
  ->getDbalHandler()
  ->getRelationManager(Entity\RelationMeYou::class)
  ->getChildren(123)
;


Beispiel: Eltern lesen
$this // oder Application\Application::get()
  ->getDbalHandler()
  ->getRelationManager(Entity\RelationMeYou::class)
  ->getChildren(123)
;

Weitere Methoden sind dem Interface Dbal\Definition\RelationManagerInterface zu entnehmen.

  • Keine Stichwörter