Подтвердить что ты не робот

"Invalid PathExpression. Должно быть выражение StateFieldPathExpression" в построителе запросов с не связанными объектами

У меня есть четыре объекта: OfficialDocument, Media, NMediaStatus и NMediaType. Я пытаюсь перевести этот SQL:

SELECT od.media, od.type, od.status, md.url, nms.name 
    FROM official_document od 
    LEFT JOIN media md ON od.media = md.id 
    LEFT JOIN n_media_status nms ON od.status = nms.id
    WHERE od.company = 9 

для Query Builder Doctrine, и это результат:

public function findOfficialDocument($company_id) {
    $qb = $this->getEntityManager()->createQueryBuilder();

    $qb->select('od.media', 'od.type', 'od.status', 'md.url', 'nms.name', 'nmt.name');
    $qb->from('Company\RegisterCompanyBundle\Entity\OfficialDocument', 'od');
    $qb->leftJoin('Common\MediaBundle\Entity\Media', 'md', \Doctrine\ORM\Query\Expr\Join::WITH, 'od.media = md.id');
    $qb->leftJoin('Common\MediaBundle\Entity\NMediaStatus', 'nms', \Doctrine\ORM\Query\Expr\Join::WITH, 'od.status = nms.id');
    $qb->leftJoin('Common\MediaBundle\Entity\NMediaType', 'nmt', \Doctrine\ORM\Query\Expr\Join::WITH, 'od.type = nmt.id');

    $qb->where('od.company = ?1');
    $qb->setParameter(1, $company_id);

    return $qb->getQuery()->getResult();
}

Но в любое время, когда я вызываю функцию с моего контроллера, я получаю эту ошибку:

[Семантическая ошибка] строка 0, col 10 около 'media, od.type,': Ошибка: Недопустимое значение PathExpression. Должно быть выражение StateFieldPathExpression.

[1/2] QueryException: SELECT od.media, od.type, od.status, md.url, nms.name, nmt.name FROM Компания \RegisterCompanyBundle\Entity\OfficialDocument od LEFT JOIN Common\MediaBundle\Entity\Media md WITH od.media = md.id LEFT JOIN Common\MediaBundle\Entity\NMediaStatus nms WITH od.status = nms.id LEFT JOIN Common\MediaBundle\Entity\NMediaType nmt WITH od.type = nmt.id WHERE od.company =? 1

OfficialDocument относится к другим трем сущностям, но поскольку мне не нужен reversedBy в этих сущностях, тогда я жестко это вызывает ошибку, а может и нет, не уверен в этом. В любом случае, какие-либо советы или помощь в решении этой проблемы?

PS: Я использую последние Symfony2 и Doctrine2, если вам нужно взглянуть на мои сущности, вот они: OfficialDocument, Медиа, NMediaStatus, NMediaType

4b9b3361

Ответ 1

Я отвечаю себе, так как нашел, как это исправить:

$qb->select('IDENTITY(od.media)', 'IDENTITY(od.type) AS doc_type', 'IDENTITY(od.status) AS doc_status', 'md.url', 'nms.name', 'nmt.name');

Так как od.media, od.type, od.status являются составными ключами, тогда мне нужно добавить IDENTITY, чтобы заставить запрос работать и исправить проблему

Ответ 2

Просто вы можете использовать (), где существуют составные ключи.

$qb->select('(od.media)', '(od.type) AS doc_type', '(od.status) AS doc_status', 'md.url', 'nms.name', 'nmt.name');