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'))
;