这是我的TagAdmin类
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('name')
->add('description')
->add('slug','text',array(
'read_only' => true,
))
->add('categories', 'sonata_type_model', array('expanded'
=> true, 'multiple' => true));
} 在类别和标签之间有一个manyToMany mapping。
我最近升级到了Sonata Admin 2.0版。
我确信它之前是有效的,但现在当我向标签添加新类别时,我会收到一条成功的闪光消息,但更改没有反映出来。
我所做的唯一的其他更改是集成了所选的JQuery插件来处理复选框。我也尝试过删除它,但它的功能是一样的。
会出什么问题呢?
这是Tag类。
class Tag
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $name
*
* @Gedmo\Sluggable(slugField="slug")
* @ORM\Column(name="name", type="string", length=255)
* @Gedmo\Translatable
*/
private $name;
/**
* @var text $description
*
* @ORM\Column(name="description", type="text")
* @Gedmo\Translatable
*/
private $description;
/**
* @ORM\ManyToMany(targetEntity="Category", mappedBy="tags")
*/
protected $categories;
/**
* @var string $slug
* @Gedmo\Slug(updatable=false)
* @ORM\Column(name="slug", type="string", length=255)
*/
private $slug;
public function __construct()
{
$this->categories = new \Doctrine\Common\Collections
\ArrayCollection();
} 发布于 2012-04-12 14:14:07
抱歉,这和索纳塔无关。
这是映射的问题。Doctrine2文档说明:
关系的所属方确定对数据库中关系的更新。
要完全理解这一点,请记住在对象世界中是如何维护双向关联的。关联的两端各有2个引用,这2个引用都表示相同的关联,但可以彼此独立地更改。当然,在正确的应用程序中,双向关联的语义由应用程序开发人员正确维护(这是他的职责)。should需要知道这两个内存中的引用中哪一个应该持久化,哪个不应该持久化。这就是owning/inverse概念的主要用途。
仅对关联的反面所做的更改将被忽略。确保更新双向关联的两端(或者至少从Doctrine的角度来看,更新拥有方)
双向关联的拥有方是side Doctrine在确定关联的状态时“查看”,并因此确定是否需要执行任何操作来更新数据库中的关联。
我的映射定义如下:
class Tag
{
...
/**
* @ORM\ManyToMany(targetEntity="Category", mappedBy="tags")
*/
protected $categories;
...
}
class Category
{
...
/**
* @ORM\ManyToMany(targetEntity="Tag", inversedBy="categories")
*/
protected $tags;
...
}将inversedBy设置为Tag类,解决了这个问题。所以正确的实现是这样的:
class Tag
{
...
/**
* @ORM\ManyToMany(targetEntity="Category", inversedBy="tags")
*/
protected $categories;
...
}
class Category
{
...
/**
* @ORM\ManyToMany(targetEntity="Tag", mappedBy="categories")
*/
protected $tags;
...
}https://stackoverflow.com/questions/10107282
复制相似问题