我有一个用于创建新BroadcastMessage
实体的表单,我需要显示绑定到<select multiple="multiple">
属性的excludedUsers
类型的小部件,与Doctrine2不直接相关协会
在我的BroadcastMessageType
类中(继承自AbstractType
):
$builder->add('excludedUsers, 'entity', array(
'class' => 'Acme\MyBundle\Enrity\User',
'property' => 'username',
'multiple' => true
));
这当然适用于创建新 BroadcastMessage
;但在editAction
我需要一个复杂的查询来获取被排除的用户。我需要计算在名为broadcast_message_reference
的交叉引用表中查找记录的排除用户。
我的问题非常简单:在哪里添加此“复杂查询”以便将excludedUsers
属性正确绑定到<select multiple="multiple">
窗口小部件?在我的getExludedUsers
方法中?如果是,我应该如何访问该查询的实体存储库?
class BroadcastMessage
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
private excludedUsers;
public function __costrunct()
{
$this->excludedUsers = new ArrayCollection();
}
public function addExcludedUser(Acme\MyBundle\Enrity\User $user)
{
$this->excludedUsers[] = $user;
return $this;
}
public function getExcludedUsers() { return $this->excludedUsers; }
}
答案 0 :(得分:0)
实际上,我认为,您需要在表单项定义中选择query_builder
:
$builder->add('excludedUsers', 'entity', array(
'class' => 'Acme\MyBundle\Enrity\User',
'property' => 'username',
'multiple' => true,
'query_builder' => function(EntityManager $em){
// you have an instance of EntityManager so you may build
// arbitrary QueryBuilder. Just remember to return it
// for example:
$qb = $em->createQueryBuilder()
->from('Acme\MyBundle\Enrity\User u')
->where('u.excluded = true');
return $qb;
},
'property' => 'username'
));
这只是一个粗略的示例,但您可以找到有关实体表单类型here的更多信息。
答案 1 :(得分:0)
我认为你的问题可以通过Form events来解决。为EventSubscriber
类创建服务,注入EntityManager
,然后订阅FormEvents::SET_DATA
事件。