ODM (Brandbox/Odm)

Mithilfe der Basisklassen in Brandbox/Odm kann eine Datenbankentität mit einer JSON-Spalte ausgestattet werden. Diese Tabellenspalte wird verschlüsselt und kann direkt über den QueryBuilder angesprochen werden.

Integration

Mit dem Interface \Brandbox\Framework\Brandbox\Odm\Lib\Definition\OdmEntityInterface sowie dem Trait \Brandbox\Framework\Brandbox\Odm\Lib\Definition\OdmEntityTrait kann eine Entität mit der ODM-Tabellenspalte erweitert werden.

Informationszugriff

Der direkte Zugriff auf die durch die Basisklassen hinzugefügte JSON-Datenbankspalte ist nicht gestattet, stattdessen müssen die nachfolgenden Möglichkeiten genutzt werden.

Erstellen einer Information

use Brandbox\Framework\Brandbox\Odm; use Brandbox\Frameworm\Brandbox\Doctrine; class MyExampleEntity extends Doctrine\Definition\EntityAbstract implements Odm\Lib\Definition\OdmEntityInterface { use Odm\Lib\Definition\OdmEntityTrait; /* * @Column-Deklaration ... */ public string $example = 'property'; } // Abrufen der Informationen $entity = new MyExampleEntity(); $entity->example = 'myvalue'; $entity->{"something"} = 'content';

Abrufen einer Information

use Brandbox\Framework\Component\Odm; use Brandbox\Frameworm\Brandbox\Doctrine; class MyExampleEntity extends Doctrine\Definition\EntityAbstract implements Odm\Lib\Definition\OdmEntityInterface { use Odm\Lib\Definition\OdmEntityTrait; /* * @Column-Deklaration ... */ public string $example = 'property'; } // Abrufen der Informationen $entity = new MyExampleEntity(); $example = $entity->example; $dynamic = $entity->{"something"};

QueryBuilder

Die Informationen der JSON-Tabellenspalte können direkt als echte Informationen im QueryBuilder genutzt werden.

Abrufen einer Information

use Brandbox\Framework\Component\Odm; use Brandbox\Frameworm\Brandbox\Doctrine; class MyExampleEntity extends Doctrine\Definition\EntityAbstract implements Odm\Lib\Definition\OdmEntityInterface { use Odm\Lib\Definition\OdmEntityTrait; /* * @Column-Deklaration ... */ public string $example = 'property'; } $builder = $this ->getDbalHandler() ->getRepository(MyExampleEntity::class) ->newQueryBuilder('alias') ; $expr = $builder->expr(); $builder ->andWhere($expr->eq('alias.example', ':variable_example')) ->andWhere($expr->eq('alias.something', ':variable_something')) ;