Doctrine Query help - PullRequest
       9

Doctrine Query help

0 голосов
/ 27 апреля 2011

Мне нужно выполнить SQL-запрос с использованием доктрины. запрос действительно прост

ВЫБРАТЬ q. *, COUNT (a.question_id) ОТ вопрос КАК ДАЛЕЕ ПРИСОЕДИНЯЙТЕСЬ вопрос_ответы КАК ВКЛ q.id = a.question_id GROUP BY a.question_id

Для этого я написал следующий код

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

Но это не дает мне желаемый запрос. Кто-нибудь может объяснить мне, что мне не хватает? Сгенерированный с помощью $query->buildSqlQuery() запрос сгенерирован

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

1 Ответ

1 голос
/ 27 апреля 2011

Поскольку вы не использовали стандартное соглашение об именах между таблицами и именами моделей, Doctrine запутывается в объединении.Я подозреваю, что вы также, возможно, не определили отношения между моделями / таблицами, чтобы Doctrine могла автоматически создавать объединения для вас.

Попробуйте изменить вызов leftJoin () в этом запросе, чтобы он выглядел следующим образом:

->leftJoin('q.Model_QuestionAnswers a')

Возможно, вам потребуется явно определить отношение в файле schema.yml, чтобы сработало простое утверждение, подобное приведенному выше.Например, в конце определения для Model_QuestionAnswers вы добавили бы:

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

Также примечание: я заметил, что вы используете как единственные, так и множественные имена для своих таблиц и моделей.Обычно выбирают один или другой и придерживаются его, особенно когда вы используете фреймворки и / или ORM, которые должны иметь возможность угадывать имена и автоматически генерировать код.Я использую Doctrine с фреймворком Symfony.По крайней мере, в этом контексте модели и имена таблиц являются единичными по соглашению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...