2013-01-08 12 views
53

Ho un ente che assomiglia a questo:Symfony2 e Doctrine - Errore: PathExpression non valido. Deve essere uno StateFieldPathExpression

/** 
* @Gedmo\Tree(type="nested") 
* @ORM\Table(name="categories") 
* @ORM\Entity() 
*/ 
class Category extends BaseCategory 
{ 

    /** 
    * @ORM\OneToMany(targetEntity="Category", mappedBy="parent") 
    */ 
    protected $children; 

    /** 
    * @Gedmo\TreeParent 
    * @ORM\ManyToOne(targetEntity="Category", inversedBy="children") 
    * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="SET NULL") 
    */ 
    protected $parent; 

} 

e sto cercando di eseguire una query come questa:

$qb = $this->em->createQueryBuilder() 
      ->select('c.parent') 
      ->from('Category', 'c'); 

$result = $qb->getQuery()->getArrayResult(); 

Tuttavia, sto ottenendo il seguente errore:

[Semantical Error] ... Error: Invalid PathExpression. Must be a StateFieldPathExpression. 

Come posso selezionare il campo parent_id dalla mia tabella. Ho provato un sacco di varianti e anche se faccio qualcosa di simile:

$qb = $this->em->createQueryBuilder() 
      ->select('c') 
      ->from('Category', 'c'); 

ottengo tutti i campi della tabella tranne per il parent_id. Sembra che Doctrine si stia intromettendo. Come posso interrogare per questo campo parent_id? o meglio ancora come posso ottenere tutti campi della tabella compreso il parent_id

risposta

156

È possibile utilizzare la funzione attualmente non documentati IDENTITY per selezionare l'ID di FK in una query:

SELECT IDENTITY(c.parent) ... 
+3

appena trovato è documentato in http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql -doctrine-query-language.html – alex88

+3

Lei signore, ho appena salvato la mia giornata! – flu

+1

Grazie mille! – Matheno

9

soluzione utilizzando createQueryBuilder :

$query->SELECT('pa.id') 
     ->from('Category', 'ca'); 
$query->join('ca.parent', 'pa'); 

$result = $query->getQuery()->getArrayResult(); 
4

Si sta selezionando un oggetto non unito. Come detto in un'altra risposta, si deve fare qualcosa di simile:

qb->innerJoin("c.parent", "p") 
Problemi correlati