6

私は Symfony2 クエリビルダーを初めて使用します。これが私がしていることです:

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

エンティティを containerType (リレーショナル フィールド、FK) で並べ替えたい場合を除いて、正常に動作します。

この行を追加すると:

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

エラーが表示されます: パス式が無効です。StateFieldPathExpression である必要があります。

では、これは何ですか? where 句ではリレーション フィールド containerType を使用できますが、sort 句では使用できません。それとも、他に何か不足していますか?

4

1 に答える 1

9
'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;
}

これは現在の ! クエリ ビルダーは、使用するフィールドを認識していません (containerType でさえエンティティの ID を表します!)。したがって、エンティティに参加し、そのフィールドで手動で並べ替える必要があります。

于 2012-08-12T13:47:58.740 に答える