DoctrineExtensions mit Symfony2 & Doctrine2 verwenden

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!

Veröffentlicht von

www.mabraham.de

Kommt noch.