【发布时间】:2012-11-05 18:32:18
【问题描述】:
Customer 与Keyword 是“关键字/客户”关系的反面:
/**
* @ORM\ManyToMany(targetEntity="Keyword", mappedBy="customers",
* cascade={"persist", "remove"}
* )
*/
protected $keywords;
创建新客户时,应选择一个或多个关键字。实体表单字段为:
$form->add($this->factory->createNamed('entity', 'keywords', null, array(
'class' => 'Acme\HelloBundle\Entity\Keyword',
'property' => 'select_label',
'multiple' => true,
'expanded' => true,
)));
在我的控制器代码中,绑定请求并检查表单是否有效后,我需要保留客户和所有客户/关键字关联,即连接表。
但是客户是反面,所以这是行不通的:
if($request->isPost()) {
$form->bindRequest($request);
if(!$form->isValid()) {
return array('form' => $form->createView());
}
// Valid form here
$em = $this->getEntityManager();
$em->persist($customer);
$em->flush();
}
带有“级联”选项的事件,此代码失败。 $customer->getKeywords() 将返回 Doctrine\ORM\PersistentCollection,它只包含选定的关键字。
我是否应该手动检查删除/添加了哪个关键字,然后从拥有方更新?
【问题讨论】:
-
我在 [这里][1] 发布了我的解决方案。希望它会有所帮助。 [1]:stackoverflow.com/a/27113108/3133441
标签: symfony orm doctrine doctrine-orm symfony-2.1