首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从奏鸣曲管理中的选择列表中删除已合并的值

从奏鸣曲管理中的选择列表中删除已合并的值
EN

Stack Overflow用户
提问于 2017-11-14 15:09:20
回答 1查看 387关注 0票数 0

我的奏鸣曲里有一对一的关系。

代码语言:javascript
复制
Person <-> Player. 

如果我去我的个人管理员,我可以选择球员从选择列表。

如果我转到另一个Person对象,玩家(现在已经分配)将再次显示.如果我选择了,就会出现错误.

错误是

更新对象失败: AppBundle\Entity\Person SQLSTATE23000:完整性约束违反:键'UNIQ_9A5FDF45F6B75B26‘的1062重复条目'18’

是否可以更改已赋值的行为不出现在其他对象中?

我在奏鸣曲管理中找不到这样做的选择。

EN

回答 1

Stack Overflow用户

发布于 2017-11-14 18:50:43

您可以为每个人生成一个自定义选择列表。

向PlayerRepository添加方法:

代码语言:javascript
复制
class PlayerRepository extends EntityRepository
{
    public function getNotAssociatedPlayers($person)
    {
        $qb = $this->createQueryBuilder('p')
                   ->leftJoin('p.person', 'prsn')
                   ->where('prsn.id is null');
        if($person !== null)
        {
            $qb->orWhere('prsn.id = :person')
               ->setParameter('person', $person);
        }

        return $qb->getQuery()
                  ->getResult();
    }
}

并在PersonAdmin中使用:

代码语言:javascript
复制
protected function configureFormFields(FormMapper $formMapper)
{
    $person = ($this->getSubject()->getPlayer() !== null)
              ? $this->getSubject()->getId()
              : null;
    $em = $this->getConfigurationPool()->getContainer()->get('doctrine.orm.entity_manager');
    $choices = $em->getRepository('YourBundle:Player')->getNotAssociatedPlayers($person);

    $formMapper
        ->add('player', null, array(
            'choices' => $choices,
        ));

拜托,如果有什么不对劲的话请告诉我。

编辑:

文档化解决方案是字段的query_builder选项:

代码语言:javascript
复制
$formMapper
    ->add('player', null, array(
        'query_builder' => function(EntityRepository $er) 
        {
            $qb = $er->createQueryBuilder('p')
                     ->leftJoin('p.person', 'prsn')
                     ->where('prsn.id is null');
            if($this->getSubject()->getPlayer() !== null)
            {
                $qb->orWhere('prsn.id = :person')
                   ->setParameter('person', $this->getSubject()->getId());
            }
            return $qb;
        }
    ));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47289091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档