这是我的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。
我确信它的工作时间较早,但现在我添加了新的类别 一个标签,我得到一个成功的flash消息,但改变不是 反映。
我所做的唯一其他改变是整合了Chosen 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();
}
答案 0 :(得分:2)
抱歉,这与索纳塔无关。
这是映射的问题。 Doctrine2文档说明:
关系的拥有方确定数据库中关系的更新。
要完全理解这一点,请记住双向关联的方式 维持在对象世界。每侧有2个参考 关联和这两个引用都代表相同 关联但可以彼此独立地改变。当然,在 一个正确的应用程序双向关联的语义 应用程序开发人员正确维护(这是他的 责任)。学说需要知道这两个中的哪一个在记忆中 引用是应该持久化的,而不是。这是 拥有/反向概念主要用于什么。
忽略仅对关联的反面进行的更改。 确保更新双向关联的两侧(或在 至少是拥有方,从学说的角度来看)
双向关联的拥有方是边缘主义 在确定关联状态时“看着”,并且 因此,更新关联是否有任何事情要做 在数据库中。
我的映射定义如下: -
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;
...
}