/ / Doctrine Query hilfe - zend-framework, doctrine

Doctrine Query help - zend-framework, Lehre

Ich muss SQL-Abfrage mit Doktrin durchführen. Abfrage ist wirklich einfach

SELECT q. *, COUNT (a.question_id) FROM Frage AS q LINKS JOIN question_answers ALS EIN q.id = a.question_id GROUP BY a.question_id

Zu diesem Zweck habe ich folgenden Code geschrieben

    $query = Doctrine_Query::create()
->select("q.*, COUNT(a.question_id) AS answers")
->from("Model_Question q")
->leftJoin("Model_QuestionAnswers a ON q.id = a.question_id")
->groupBy("a.question_id");

Aber das bringt mir keine erwünschte Frage. Kann mir jemand erklären, was mir fehlt? Abfrage, die generiert wird, habe ich über überprüft $query->buildSqlQuery() ist

SELECT q.id AS q__id, q.title AS q__title, q.short_description AS q__short_description,
q.created_at AS q__created_at, q.updated_at AS q__updated_at, q.is_visible AS
q__is_visible, q.category_id AS q__category_id, q.user_id AS q__user_id, q.category_name
AS q__category_name, q.username AS q__username, COUNT(q2.question_id) AS q2__0 FROM
question q, question_answers q2 GROUP BY q2.question_id

Antworten:

1 für die Antwort № 1

Weil Sie die Standardbenennung nicht verwendet habenKonvention zwischen Tabellen und Modellnamen, Doctrine ist verwirrt über den Beitritt. Ich vermute, dass Sie möglicherweise auch nicht die Beziehung zwischen den Modellen / Tabellen definiert haben, so dass Doctrine automatisch Verknüpfungen für Sie erstellen kann.

Versuchen Sie, Ihren leftJoin () - Aufruf in dieser Abfrage so zu ändern:

->leftJoin("q.Model_QuestionAnswers a")

Möglicherweise müssen Sie die Beziehung explizit definierenIhre Schema.yml-Datei, so dass eine einfache Anweisung wie oben beschrieben funktioniert. Am Ende der Definition für Model_QuestionAnswers würden Sie beispielsweise Folgendes hinzufügen:

relations:
Model_Question:
local: question_id
foreign: id
foreignAlias: Model_QuestionAnswers

Auch eine Randnotiz: Ich bemerke, dass Sie sowohl Singular- als auch Pluralnamen für Ihre Tabellen und Modelle verwenden. Es ist üblich, das eine oder das andere zu wählen und sich daran zu halten, besonders wenn Sie Frameworks und / oder ORMs verwenden, die Namen erraten können und generieren automatisch Code. Ich verwende Doctrine mit dem Symfony-Framework. Zumindest in diesem Kontext sind Modelle und Tabellennamen per Konvention einzigartig.