2012-01-05 8 views
5

私は2つのエンティティ、ProductとProduct_Typesを持っています。Symfony2コレクションフォームが結合カラムを埋めない

これは、それらの間の関係である:私は新しい製品を追加すると

manyToOne: 
    product: 
     targetEntity: Product 
     joinColumn: 
     name: product_id 
     referencedColumnName: id 

は、私は同じ形で本製品にタイプを追加できるようにしたいです。

  ->add('productColor', 'collection', array("type" => new ProductColorType(), "allow_add" => true, 'prototype' => true)) 

これは私がフォームを埋め込む方法です。

'data_class'はProductTypeとProductTypesTypeの両方に設定されています。タイプを含む新しい製品を追加すると、symfony/doctrineは 'product_id'列を設定しないため、すべてが問題ありません。私の製品とそのタイプとの間には関係がありません。

+0

私はこの質問をする前に、年を取って解決策を探していましたが、解決策を見つけたので、製品を永続させる前にその種類の製品を設定しました。それは問題を解決するが、私はそれがこのようにしなければならないとは思わない。 – Tom

答えて

0

エンティティマネージャがフラッシュされる前にproductColorsも保持するようにしてください。

5

エンティティを手動でクロスリンクする必要があります。 SymfonyもDoctrineもあなたのためにこれをしません。

  • をあなたはsymfonyのマスター
  • を実行している:

    public function getProductColors() 
    { 
        return $this->productColors; 
    } 
    
    public function addProductColor(ProductColor $color) 
    { 
        $this->productColors->add($color); 
        $color->setProduct($this); 
    } 
    

    はその後の3つの要件は、この仕事にするために満たされなければならない:あなたは()メソッド...アドオンの中に、たとえば、これを行うことができます

  • あなたはfalse
に "コレクション" 欄の "by_reference" オプションを設定2.1.7/2.2.3
  • 教義を実行しています

    これをすべてやったなら、あなたは大丈夫でしょう。

  • +0

    addProductColor()でsetProduct()を呼び出すと動作します。しかし、ドキュメントによると、by_referenceをfalseに設定するとsetProductColors()が呼び出されるはずですが、そうではないようです。何か案が? –

    +0

    追加/削除方法が利用可能かどうかによって異なります。そうであれば、セッターの代わりに使用されます。 –