我的奏鸣曲里有一对一的关系。
Person <-> Player. 如果我去我的个人管理员,我可以选择球员从选择列表。
如果我转到另一个Person对象,玩家(现在已经分配)将再次显示.如果我选择了,就会出现错误.
错误是
更新对象失败: AppBundle\Entity\Person SQLSTATE23000:完整性约束违反:键'UNIQ_9A5FDF45F6B75B26‘的1062重复条目'18’
是否可以更改已赋值的行为不出现在其他对象中?
我在奏鸣曲管理中找不到这样做的选择。
发布于 2017-11-14 18:50:43
您可以为每个人生成一个自定义选择列表。
向PlayerRepository添加方法:
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中使用:
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选项:
$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;
}
));https://stackoverflow.com/questions/47289091
复制相似问题