我有两个实体:Worker
和User
。我在他们之间建立了一对一的关系:
class Worker
{
...
/**
* @ORM\OneToOne(targetEntity="Application\Sonata\UserBundle\Entity\User", inversedBy="worker")
*/
protected $user;
...
}
class User extends BaseUser
{
...
/**
* @ORM\OneToOne(targetEntity="Luny\SiteBundle\Entity\Worker", mappedBy="user")
*/
protected $worker;
...
}
现在,使用SonataAdminBundle我创建了编辑工作者的页面。在那里我使用FormMapper来创建表单。它看起来像这样:
class WorkerAdmin extends Admin
{
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('fname', 'text', array('label' => 'First Name'))
->add('lname', 'text', array('label' => 'Last Name'))
->add('user');
}
}
此代码为'user'字段生成下一个html-code:
<select id="s547d83b883c77_user" name="s547d83b883c77[user]" class="select2-offscreen" tabindex="-1" title="User">
<option value=""></option>
<option value="2">test</option>
<option value="1" selected="selected">test2</option>
</select>
现在,如果我尝试编辑另一个工作者,我希望它不显示已经连接到其他工作者的用户。我该怎么办?
我是Symfony的新手,所以如果我上面写的都不是详尽的信息,那就问问。
答案 0 :(得分:1)
class WorkerAdmin extends Admin
{
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('fname', 'text', array('label' => 'First Name'))
->add('lname', 'text', array('label' => 'Last Name'))
->add('User', null, array(
'class' => 'Application\Sonata\UserBundle\Entity\User',
'query_builder' => function($repository) {
return $repository->createQueryBuilder('u')
->leftJoin('u.worker', 'w')
->where('w is null');
}));
}
}