我目前正在使用使用 Symfony 2.1.0-DEV 和 Doctrine 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 创建/编辑表单面板向多对多关联添加价格,则更新不起作用。
关于这个问题的任何提示?谢谢!
最佳答案
更新解决方案
我找到了我的问题的答案:为了使事情与 多对多 关系一起工作,您需要传递 *by_reference* 等于 false (有关更多详细信息,请参阅 here)。
更新的工作版本是:
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()
;
}
}
...
}
关于php - Sonata Admin Bundle 不适用于多对多实体关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11341872/