2017-01-25 4 views
1

と更新で奇妙な行動、私は2つのエンティティがあります。私のデシベルでドクトリン:Symfonyの

/** 
* @ORM\Entity 
* @ORM\Table(name="A") 
*/ 
class A { 
    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\OneToMany(targetEntity="B", mappedBy="a") 
    */ 
    protected $bs; 
} 

/** 
* @ORM\Entity 
* @ORM\Table(name="B") 
*/ 
class B { 
    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    /** 
    protected $id; 

    * @ORM\ManyToOne(targetEntity="A", inversedBy="bs") 
    * @ORM\JoinColumn(name="id_a", referencedColumnName="id") 
    * @ORM\JoinColumn(onDelete="CASCADE") 
    */ 
    protected $a; 

} 

は、テーブルBは、キー(ID、ID_A)を持っています。編集方法で は、私はID_BとID_AによってBを取得し、私はEntityManagerの上のフラッシュを実行:

$em = $this->getDoctrine()->getEntityManager(); 
    $b = $em->getRepository('B')->find(array('id' => $id_b,'a' => $id_a)); 

    $form = $this->createFormBuilder($b) 
     ->add(...) 
     ->getForm(); 

    $form->handleRequest($request); 

    if ($form->isValid()) { 
     $em->flush(); 
     ... 

変更はID_Bを持つすべてのB行に適用され、ID_Aは考慮されません。

すべてのヘルプは、事前に おかげで、あなたのリポジトリの方法でエラーを取得する必要があり、すべての

答えて

0

ファーストを高く評価します。あなたがこの方法またはMethodeのの署名を見つけるを使用している次のとおりです。

public function find($id); 

あなたはfindBy機能を探しているようだ:

public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null); 

は、この関数は、コレクションを返すことに注意してください単一のオブジェクトではありません。

+0

いいえ。 $ idは実際には配列になります。珍しいことですが、うまくいきます。実際の質問に答えることを検討してください。非常に率直に、私にはやや矛盾しているようです。がんばろう。 – Cerad

関連する問題