Wie viele andere verwende ich als relationales Datenbankmanagementsystem (RDBMS) weitgehend MySQL. Leider unterstützt Doctrine2 von Haus aus keine/kaum MySQL-spezifische Funktionen wie beispielsweise IFNULL
. Diese Lücke schließen die DoctrineExtensions von Benjamin Eberlei. Dieser Artikel beschreibt wie man die DoctrineExtensions in Symfony2 & Doctrine2 integriert.
Unter packagist.org steht ein Paket für die Installation via Composer bereit.
Zur Installation wird die die composer.json
im Hauptverzeichnis des Projekts um die folgende Zeile im Bereich require
ergänzt.
"require": { [..] # folgende Zeile einfügen "beberlei/DoctrineExtensions": "dev-master" [..] }
Die eigentliche Installation wird via
php composer.phar update beberlei/DoctrineExtensions
angestoßen und abgeschlossen.
Die in den Erweiterungen enthaltenen MySQL-spezifischen Funktionen findet man anschließend im Verzeichnis vendor/beberlei/DoctrineExtension/lib/DoctrineExtensions/Query/Mysql
. Um nun beispielsweise die Funktion IFNULL
zu Doctrine hinzuzufügen, genügt es unter app/config/config.php
die folgenden zwei Zeile im Bereich doctrine:orm:dql
hinzuzufügen. Nebenbei: DoctrineExtensions\Query\Mysql
ist der Namespace der MySQL-spezifischen Funktionen in der Extension.
[..] doctrine: orm: dql: # folgende zwei Zeilen hinzufügen. string_functions: ifnull: DoctrineExtensions\Query\Mysql\IfNull [..]
Anschießend kann die neue Funktion in Symfony verwendet werden.
$qb = $this->getManager()->createQueryBuilder(); $qb ->select(array('b')) ->addSelect('IFNULL(b.price, 1) AS HIDDEN hiddenprice') ->from(FooBundle:Bar, 'b') ->where(hiddenprice <= 1);
Viel Vergnügen!
Google+