createFormBuilder中的未知列

时间:2014-03-11 17:37:00

标签: forms symfony

当我尝试渲染表单时,我收到的错误是"未知列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();

1 个答案:

答案 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);
}

第一个参数是$aliasselect() , 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)