我在Symfony 2.0.17-DEV和PHP 5.3.14上使用Doctrine 2.2.2。我遇到了多级联合级联选项的问题。例子很简单,希望这个梦幻般的董事会的人能够帮助我。学说2.2.2,级联不能与多对多关联?
无论如何,Meta
超类是与User
关系的所有者。相关领域和唯一的构造:
abstract class Meta
{
/**
* @ORM\ManyToMany(targetEntity="User", inversedBy="meta")
* @ORM\JoinTable(name="meta_users",
* joinColumns={@ORM\JoinColumn(onDelete="CASCADE")},
* inverseJoinColumns={@ORM\JoinColumn(onDelete="CASCADE")}
*)
*/
protected $users;
public function __construct()
{
$this->users = new ArrayCollection();
}
public function addUser(User $user)
{
$this->users[] = $user;
return $this;
}
public function getUsers()
{
return $this->users;
}
}
(实现,只是空类,是Label
和Category
)
很简单,它的工作原理,实际上。我的意思是,从元中添加或删除用户实际上会在连接表中添加/删除相应的行。
问题发生在做相反的事情:创建/编辑用户并分配元。 User
定义与元联想这种方式,并增加了一个级联=“所有”选项:
class User
{
/**
* @ORM\ManyToMany(targetEntity="Meta", mappedBy="users", cascade={"all"})
*/
protected $meta;
public function __construct()
{
$this->meta = new ArrayCollection();
}
public function addMeta(Meta $meta)
{
$this->meta[] = $meta;
return $this;
}
public function getMeta()
{
return $this->meta;
}
}
我是很新的学说,但是这是行不通的。在我的Symfony 2的形式,用于创建/编辑User
,我已经添加entity
类型的字段,只选择所有的元:
$builder
->add('meta', 'entity', array(
'label' => 'Meta',
'class' => 'Acme\HelloBundle\Entity\Meta',
'property' => 'select_label',
'multiple' => true,
'expanded' => true,
))
;
任何表没有改变分配(使用复选框)元给用户时。怎么了?我确定我错过了一些东西,但我找不到什么。