Customer
是「關鍵字/客戶」的關係反側Keyword
:在Doctrine 2中更新(從反面)雙向多對多關係?
/**
* @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]:http://stackoverflow.com/a/27113108/3133441 – ajtamwojtek