私はSymfony2.0.17-DEVとPHP5.3.14でDoctrine2.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;
}
}
(実装、空のクラス、areLabel
およびCategory
)
シンプルで、実際に機能します。つまり、メタからユーザーを追加または削除すると、結合テーブルの対応する行が実際に追加/削除されます。
問題は、ユーザーの作成/編集とメタの割り当てという逆の方法で発生します。User
この方法でメタとの関連付けを定義し、cascade="all"オプションを追加します。
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;
}
}
私はDoctrineにまったく慣れていませんが、これは機能していません。を作成/編集するための私のSymfony2フォームに、すべてのメタを選択するだけ
User
で、タイプのフィールドを追加しました。entity
$builder
->add('meta', 'entity', array(
'label' => 'Meta',
'class' => 'Acme\HelloBundle\Entity\Meta',
'property' => 'select_label',
'multiple' => true,
'expanded' => true,
))
;
(チェックボックスを使用して)メタをユーザーに割り当てる場合、テーブルに変更はありません。どうしたの?何かが足りないと思いますが、何が見つかりません。