2012-08-11 15 views
5

Soy nuevo en el generador de consultas de Symfony2, esto es lo que hago:Error: PathExpression no válido. Debe haber un StateFieldPathExpression

$builder 
     ->add('access', 'entity', array(
      'label' => 'Behörigheter', 
      'multiple' => true, // Multiple selection allowed 
      'expanded' => true, // Render as checkboxes 
      'property' => 'name', // Assuming that the entity has a "name" property 
      'class' => 'BizTV\ContainerManagementBundle\Entity\Container', 
      'query_builder' => function(\Doctrine\ORM\EntityRepository $er) use ($company) { 
       $qb = $er->createQueryBuilder('a'); 
       $qb->where('a.containerType IN (:containers)', 'a.company = :company'); 
       $qb->setParameters(array('containers' => array(1,2,3,4), 'company' => $company)); 

       return $qb; 
      } 
     ));  

Funciona bien, excepto que quiero ordenar mis entidades por containerType (que es un campo relacional, FK).

Al agregar esta línea:

$qb->orderBy('a.containerType', 'ASC'); 

me sale error: PathExpression no válida. Debe ser StateFieldPathExpression.

¿Qué es esto? ¿Puedo usar el campo de relación containerType en mi cláusula where pero no en mi cláusula de ordenación? ¿O me estoy perdiendo algo más?

Respuesta

6
'query_builder' => function(\Doctrine\ORM\EntityRepository $er) use ($company) { 
     $qb = $er->createQueryBuilder('a'); 
     $qb->innerJoin('a.containerType', 'ct'); 
     $qb->where('a.containerType IN (:containers)', 'a.company = :company'); 
     $qb->orderBy('ct.id', 'ASC'); // Or the field you want from containerType 
     $qb->setParameters(array('containers' => array(1,2,3,4), 'company' => $company)); 

     return $qb; 
} 

No se puede usar containerType con la cláusula sort porque esta es una entidad en relación con la corriente. El generador de consultas no conoce el campo que se va a utilizar (incluso containerType representa la identificación de la entidad). ¡Así que debe unirse a la entidad y ordenar por su campo manualmente!

+0

Sí, pero ordenar por esa fk sería suficiente en este caso, pero obviamente no puedo. Acabo de encontrar extraño que me permita usarlo en la cláusula where sin unirse, pero no en el género. Gracias, sin embargo, lo intentaré. –

Cuestiones relacionadas