3

現在、 Symfony 2.1.0-DEVDoctrine 2.2.xを使用して Sonata Admin Bundle を使用していますが、多対多エンティティの関連付けに問題があります。

class MyProduct extends Product {

    /**
     * @ORM\ManyToMany(targetEntity="Price")
     */
    private $prices;

    public function __construct() {
        $this->prices = new \Doctrine\Common\Collections\ArrayCollection()
    }

    public function getPrices() {
        return $this->prices;
    }

    public function setPrices($prices) {
        $this->prices = $prices;
    }
}

// Admin Class

class GenericAdmin extends Admin {

    ...

    public function configureFormFields(FormMapper $formMapper)
        {
            $formMapper
                ->with('General')
                ->add('prices', 'sonata_type_model')
                ->end()
            ;
        }
    }

    ...

}

Sonata の CRUD作成/編集フォーム パネルから多対多の関連付けに価格を追加しようとすると、更新が機能しません。

この問題に関するヒントはありますか?ありがとう!

4

1 に答える 1

8

ソリューションで更新

私は自分の問題に対する答えを見つけました:多対多の関係で動作するようにするには、*by_reference* をfalseに設定する必要があります(詳細については、こちらを参照してください)。

更新された作業バージョンは次のとおりです。

class MyProduct extends Product {

    /**
     * @ORM\ManyToMany(targetEntity="Price")
     */
    private $prices;

    public function __construct() {
        $this->prices = new \Doctrine\Common\Collections\ArrayCollection()
    }

    public function getPrices() {
        return $this->prices;
    }

    public function setPrices($prices) {
        $this->prices = $prices;
    }

    public function addPrice($price) {
        $this->prices[]= $price;
    }

    public function removePrice($price) {
        $this->prices->removeElement($price);
    }
}

// Admin Class

class GenericAdmin extends Admin {

    ...

    public function configureFormFields(FormMapper $formMapper)
        {
            $formMapper
                ->with('General')
                ->add('prices', 'sonata_type_model', array('by_reference' => false))
                ->end()
            ;
        }
    }

    ...

}
于 2012-07-13T09:42:28.913 に答える