Customer
は、次の「キーワード/顧客」関係の逆側ですKeyword
:
/**
* @ORM\ManyToMany(targetEntity="Keyword", mappedBy="customers",
* cascade={"persist", "remove"}
* )
*/
protected $keywords;
新しい顧客を作成するときは、1 つ以上のキーワードを選択する必要があります。エンティティ フォーム フィールドは次のとおりです。
$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
どのキーワードが削除/追加されたかを手動で確認し、所有側から更新する必要がありますか?