Lehre: QueryBuilder gegen createQuery?
In der Lehre können Sie erstellen, DQL 2 Möglichkeiten:
EntityManager::createQuery:
$query = $em->createQuery('SELECT u FROM MyProject\Model\User u WHERE u.id = ?1');
QueryBuilder:
$qb->add('select', 'u')
->add('from', 'User u')
->add('where', 'u.id = ?1')
->add('orderBy', 'u.name ASC');
Ich Frage mich, was der Unterschied ist und welche sollte ich verwenden?
InformationsquelleAutor der Frage never_had_a_name | 2010-04-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
DQL ist einfacher zu Lesen, da es sehr ähnlich zu SQL. Wenn Sie nicht brauchen, um die Abfrage ändern, die abhängig von einer Reihe von Parametern dies ist wahrscheinlich die beste Wahl.
Query Builder ist eine api zum erstellen von Abfragen, so ist es einfacher, wenn Sie brauchen, um eine Abfrage erstellen, die dynamisch wie bei der Iteration über einen Satz von Parametern oder Filter. Sie brauchen nicht zu tun, alle string-Operationen, um Ihre Abfrage zu erstellen wie join, split oder was auch immer.
InformationsquelleAutor der Antwort jackbravo
Abfrage-generator ist einfach, sagen wir, interface für die Abfrage erstellen... Es sollte mehr komfortabel zu bedienen, es hat nicht nur add () - Methode, aber auch Methoden wie where(), andWhere(), aus(), etc. Aber am Ende, es ist nur komponiert Abfrage, wie Sie in den createQuery () - Methode.
Beispiel für die erweiterte Nutzung der Abfrage-generator:
InformationsquelleAutor der Antwort Martin Kočička
Haben Sie verschiedene Zwecke:
InformationsquelleAutor der Antwort Vincent Pazeller
Der wesentliche Unterschied ist der overhead für den Aufruf der Methoden. Ihre ersten code-Beispiel (createQuery) nur für die Einfachheit macht eine Methode aufrufen, während der die queryBuilder macht 4. Am Ende alles, was, die Sie unten kommen, um ein string, der ausgeführt werden soll, erstes Beispiel, die Sie geben Sie die Zeichenfolge, und die anderen, die Ihr baut, es mit mehreren verketteten Methodenaufrufen.
Wenn Sie auf der Suche für einen Grund, einen über den anderen, das ist eine Frage des Stils, und was sieht mehr lesbar. Für mich, wie ich das queryBuider die meisten der Zeit, es bietet auch definierte Abschnitte für die Abfrage. Auch in der Vergangenheit, es macht es einfacher, um in bedingte Logik, wenn Sie es brauchen.
InformationsquelleAutor der Antwort NiteRain
Wäre es vielleicht einfacher zu unit-testen bei der Verwendung der query builder. Lassen Sie uns sagen, Sie haben ein repository, das Abfragen für einige Daten in Anlehnung an die komplizierte Liste der Bedingungen. Und Sie wollen, um sicherzustellen, dass, wenn eine bestimmte Bedingung übergeben wird, in das repository, einige andere Bedingungen sind zusätzlich in der Abfrage. Im Falle der DQL-Sie haben zwei Optionen:
1) Zu verwenden, VORRICHTUNGEN und test der realen Interaktion mit der DB. Das finde ich etwas lästig und ununitestish.
2) Zur überprüfung der generierten DQL-code. Die machen Ihre Tests zu zerbrechlich.
Mit QueryBuilder können Sie ersetzen Sie es mit mock und stellen Sie sicher, dass "andWhere" - Methode die benötigten parameter aufgerufen wird. Natürlich sind solche überlegungen sind nicht anwendbar, wenn Ihre Abfrage ist einfach und nicht angewiesen auf alle Parameter.
InformationsquelleAutor der Antwort Dienow