我在两个表之间有一个n:m
关系:ServiceType
和UserType
,这依赖于第三个表ServiceUserType
作为n:m结果。我正在尝试从我的表单生成器中获取user_type=1
和active=TRUE
的所有服务,但这是ServiceUserType
表中的列,所以我这样做了:
....
->add('servicio', 'entity', array(
'class' => 'CommonBundle:ServiceType',
'property' => 'name',
'mapped' => FALSE,
'required' => FALSE,
'label' => 'test',
'expanded' => TRUE,
'multiple' => TRUE,
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('ts')
->leftJoin('ts.service', 'su')
->where('su.user_type = 1')
->andWhere('su.active = TRUE');
}
))
....
但我得到了这个错误:
[语义错误]第0行,第81列,靠近"su WHERE su.user_type":错误:Class CommonBundle\Entity\ServiceType没有命名为服务的关联
我不知道我做错了什么,有什么帮助吗?这是ServiceType
实体:
class ServiceType
{
protected $id;
protected $name;
protected $active = true;
...
}
另一个是ServiceUserType
:
class ServiceUserType
{
/**
* @ORMId
* @ORMManyToOne(targetEntity="CommonBundleEntityServiceType")
* @ORMJoinColumn(name="service_id", referencedColumnName="id")
*/
protected $service;
/**
* @ORMId
* @ORMManyToOne(targetEntity="CommonBundleEntityUserType")
* @ORMJoinColumn(name="user_type_id", referencedColumnName="id")
*/
protected $user_type;
/**
* @ORMColumn(name="active", type="boolean", nullable=true)
*/
protected $active = true;
...
}
我做错了什么?
servicio表单字段的类是ServiceType,当您查询时,它将选择ServiceType实体作为根。ServiceType没有名为service的字段,ServiceUserTypes有。您可以将以下属性添加到您的ServiceType实体中:
/**
*@ORMOneToMany(targetEntity="CommonBundleEntityServiceUserType", mappedBy="service")
*/
protected $serviceUserTypes;
然后更改您的查询:
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('ts')
->leftJoin('ts.serviceUserTypes', 'su')
->where('su.user_type = 1')
->andWhere('su.active = TRUE');
}
不要忘记在ServiceUserType类的属性服务上添加invertedBy选项,并在ServiceType类的构造函数上将属性$serviceUserTypes设置为新的ArrayCollection。