SonataAdmin $formMapper->add() 实体筛选



我有两个实体:WorkerUser 。我在他们之间创建了一对一的关系:

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');
                }));
    }
}

相关内容

  • 没有找到相关文章

最新更新