我有两个实体:Worker
和 User
。我在他们之间创建了一对一的关系:
class Worker
{
...
/**
* @ORMOneToOne(targetEntity="ApplicationSonataUserBundleEntityUser", inversedBy="worker")
*/
protected $user;
...
}
class User extends BaseUser
{
...
/**
* @ORMOneToOne(targetEntity="LunySiteBundleEntityWorker", 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');
}
}
此代码为"用户"字段下一个 html 代码生成:
<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的新手,所以如果我上面写的不是详尽的信息,那就问吧。
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' => 'ApplicationSonataUserBundleEntityUser',
'query_builder' => function($repository) {
return $repository->createQueryBuilder('u')
->leftJoin('u.worker', 'w')
->where('w is null');
}));
}
}