web-dev-qa-db-fra.com

"PathExpression non valide. Doit être un StateFieldPathExpression" dans le générateur de requêtes avec des entités non liées

J'ai quatre entités: OfficialDocument, Media, NMediaStatus et NMediaType. J'essaie de traduire ce 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 

à Doctrine Query Builder et voici le résultat:

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();
}

Mais chaque fois que j'appelle la fonction depuis mon contrôleur, j'obtiens cette erreur:

[Erreur sémantique] ligne 0, col 10 près de 'media, od.type': Erreur: PathExpression non valide. Doit être un StateFieldPathExpression.

[1/2] Exception de requête: SELECT od.media, od.type, od.status, md.url, nms.name, nmt.name FROM Company\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 OERE od.company =? 1

OfficialDocument est lié aux trois autres entités, mais comme je n'ai pas besoin de reversedBy dans ces entités, alors je le répète, cela cause l'erreur, ou peut-être pas, je n'en suis pas sûr. Quoi qu'il en soit, des conseils ou de l'aide pour résoudre ce problème?

PS: j'utilise les dernières Symfony2 et Doctrine2 si vous avez besoin de jeter un œil à mes entités ici: OfficialDocument , Media , NMediaStatus , NMediaType

19
ReynierPM

Je me réponds depuis que j'ai trouvé comment y remédier:

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

Puisque od.media, od.type, od.status sont des clés composites, je dois donc ajouter IDENTITY pour que la requête fonctionne et résoudre le problème

60
ReynierPM