我在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,
))
;
任何表沒有改變分配(使用複選框)元給用戶時。怎麼了?我確定我錯過了一些東西,但我找不到什麼。