当我尝试渲染表单时,我收到的错误是"未知列u0_.id in on clause"参考u.id
。但id
属性和getter是为User
实体定义的。那么,接下来发生了什么?
$form = $this->createFormBuilder()
->add('banish', 'entity', array(
'label' => $this->trans("Usuarios a expulsar"),
'class' => 'Pro\UserBundle\Entity\User',
'query_builder' => function(EntityRepository $er) use ($page){
return $er->createQueryBuilder('User')
->select('u')
->from('Pro\UserBundle\Entity\User', 'u')
->innerjoin('Pro\MembershipBundle\Entity\Membership', 'm', 'WITH', 'u.id = m.user')
->where( 'm.community = :community')
->setParameter('community', $page['community']);
},
))
->getForm();
答案 0 :(得分:1)
让我们看一下属于createQueryBuilder()
,Reference EntityRepository
Doctrine\ORM\EntityRepository
正文
/**
* Create a new QueryBuilder instance that is prepopulated for this entity name
*
* @param string $alias
* @return QueryBuilder $qb
*/
public function createQueryBuilder($alias)
{
return $this->_em->createQueryBuilder()
->select($alias)
->from($this->_entityName, $alias);
}
第一个参数是$alias
,select() , from()
中的参数与$alias
相同,然后调用createQueryBuilder()
的{{1}}方法,现在考虑你的案例
Doctrine\ORM\EntityManager
您在$er->createQueryBuilder('User')
->select('u')
->from('Pro\UserBundle\Entity\User', 'u')
中选择的别名是createQueryBuilder()
,这与您在User
中提供的别名不同,我猜这会有问题,当您在{{1}中定义了类时{1}} you can just directly use it without using again select('u') , from('u')
方法,如
entity type field
在联接中使用from()
也会使用 $form = $this->createFormBuilder()
->add('banish', 'entity', array(
'label' => $this->trans("Usuarios a expulsar"),
'class' => 'Pro\UserBundle\Entity\User',
'query_builder' => function(EntityRepository $er) use ($page){
return $er->createQueryBuilder('u')
->select('u,m')
->innerjoin('Pro\MembershipBundle\Entity\Membership', 'm', 'WITH', 'u.id = m.user')
->where( 'm.community = :community')
->setParameter('community', $page['community']);
},
))
->getForm();
等多个条件加入表格,因此如果您有任何指向您的用户实体中定义的成员资格的属性,则可以使用
WITH
它会自动加入您的用户和会员资格表,例如ON(a.col1=b.col1 AND a.col2=b.col2)