2014-03-26 6 views
12

Ich habe vier Entitäten: OfficialDocument, Media, NMediaStatus und NMediaType. Ich versuche, diese SQL zu übersetzen:"Invalid PathExpression. Muss eine StateFieldPathExpression sein" im Abfrage-Generator mit nicht verwandten Entitäten

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 

zu Doctrine Query Builder und das ist das Ergebnis:

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

Aber jedes Mal, wenn ich die Funktion von meinem Controller nenne ich bekomme diese Fehlermeldung:

[Semantical Error] line 0, col 10 near 'media, od.type,': Error: Invalid PathExpression. Must be a StateFieldPathExpression.

[1/2] QueryException: 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 WHERE od.company = ?1

OfficialDocument ist im Zusammenhang mit den anderen drei Einheiten, aber da ich die reversedBy in diesen Unternehmen nicht brauche dann hart ich das den Fehler verursacht, oder vielleicht auch nicht, nicht su re darüber. Wie auch immer, irgendein Rat oder Hilfe, um dieses Problem zu beheben?

PS: Ich bin mit neuester Symfony2 und Doctrine2 wenn Sie einen Blick auf meine Entitäten hier nehmen müssen sie sind: OfficialDocument, Media, NMediaStatus, NMediaType

Antwort

46

ich mich beantworten, da ich gefunden, wie es zu beheben:

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

Seit od.media, od.type, od.status sind zusammengesetzte Schlüssel dann brauche ich IDENTITY hinzuzufügen, um die Abfrage Arbeit zu machen und beheben das Problem

+2

Ich möchte Objekt Objekt z. B. auswählen. Medien, geben Sie statt FK IDs, was dann zu tun? –

7

Sie können einfach () verwenden, wo zusammengesetzte Schlüssel vorhanden sind.

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