Entitäten um individuelle Properties anreichern

In manchen Fällen ist es nicht ausreichend, Eigenschaften von Datentabellen über die Datenmodellierung zu ergänzen. Es kommt in diesem Fall ggf. zu Performance-Problemen, da dessen Daten in einem verschlüsselten JSON-Eigenschaftsfeld (ODM) gespeichert werden.

Um nun individuelle Eigenschaften in bestehenden Entities zu ergänzen, auf die man keinen direkten Zugriff hat, ist es nötig ein Entity zu erstellen, welches das zu ursprüngliche Entity erweitert.

Beispiel

Beispiel (shopArticle.php), um shopArticle zu erweitern
<?php declare(strict_types=1); namespace Brandbox\Dev\Example\DbalExtend\Lib\Extend { use Symfony\Component\Validator\Constraints; use Doctrine\ORM\Mapping;    class shopArticle {     #[Mapping\Column(name: 'shop_article_example', type: 'string', nullable: false, length: 255, options: ['default': '']]        #[Constraints\NotBlank, Constraints\NotHtml, Constraints\Length(max: 255)]         public string $shopArticleExample = ''; } }



Wichtig

Achten Sie auf den Namespace DbalExtend\Lib\Extend in einem beliebigen Package.



Beispiel (modelling.json), um die Eigenschaft zu beschreiben
{ "type": "modelling", "repositories": [ { "identifier": "shopArticle", "order": [ "general", "shopArticleExample" ], "groups": [ { "identifier": "general", "sets": [ { "identifier": "general", "order": [ "shopArticleName", "ShopArticleExample" ], "columns": [ { "type": "Input", "identifier": "ShopArticleExample", "label": { "de": "Beispiel", "en": "Example" }, "flags": ["result"], "constraint": [ "NotBlank()" ] } ] } ] } ] } ] }

Umgang mit übersetzbaren Eigenschaften

Soll eine ergänzte Eigenschaft auch übersetzbar sein, muss die entsprechende Translation-Entity ebenfalls erweitert werden.
Erstellen Sie in diesem Fall für das Translation-Entity ebenfalls ein Extend-Entity. Zusätzlich ergänzen Sie bitte das flag "translatable" bei der entsprechenden Eigenschaft in der modelling.json:

Auszug (modelling.json), um die Eigenschaft als übersetzbar zu markieren
"flags": ["result", "translatable"]

Achtung: ist für eine Entity keine Translation-Entity definiert, kann diese auch nicht erweitert werden.

Composer

Nach jeder Änderung an den Entity-Klassen ist es notwendig, mit Composer brandbox erneut zu installieren:

Composer-Update