Doctrine Relations und das Contao DCA
Hallo und einen schönen Pfingstmontag!
Ich bastle gerade an meiner ersten Conta-Erweiterung mit Symfony und habe eine kurze Frage zu Relations und was der korrekte oder üblichste Weg ist.
Gegeben sind zwei Tabellen, die über eine ManyToOne Beziehung verbunden sind. Die Beziehung in den Entities sieht vereinfach so aus:
MyItem.php
Code:
#[ORM\Table(name: "tl_my_item")]
class MyItem
{
…
#[ORM\ManyToOne(targetEntity: MyCollection::class, inversedBy: 'items')]
private ?MyCollection $collection = null;
MyCollection.php
Code:
#[ORM\Table(name: 'tl_my_collection')]
class MyCollection
{
…
#[ORM\OneToMany(mappedBy: 'collection', targetEntity: MyItem::class)]
private Collection $items;
In der tl_my_item wird dann automatisch die Spalte collection_id angelegt.
Entsprechend muss ich das Feld in der DCA auch benennen:
tl_my_item.php
Code:
'fields' => [
…
'collection_id' => [
'inputType' => 'select',
'filter' => true,
'sorting' => true,
'foreignKey' => 'tl_my_collection.title',
'eval' => ['mandatory' => true, 'includeBlankOption' => true, 'tl_class' => 'w50'],
'relation' => ['type' => 'belongsTo', 'load' => 'lazy'],
]
So richtig gefällt mir das aber nicht, weshalb ich im Entity mit #[ORM\JoinColumn den Spaltennamen explizit angegeben habe:
MyItem.php
Code:
#[ORM\Table(name: "tl_my_item")]
#[ORM\JoinColumn(name: 'collection', referencedColumnName: 'id')]
class MyItem
{
…
#[ORM\ManyToOne(targetEntity: MyCollection::class, inversedBy: 'items')]
private ?MyCollection $collection = null;
Dann wir die Spalte collection genannte und kann so im DCA angesprochen werden.
Meine Frage ist jetzt, was hier Best practice ist oder ob es egal ist oder ob ich gleich etwas ganz falsch gemacht habe?
Gruß