かなり古い投稿でしたが、各エンティティのコレクションremoveElementを手動で実行して@Rene Terstegenによる回答を拡張するのではなく、ORCLのORM Entity側から関連付けが解除されるようにする方法を提供したかったのです。
Doctrineが関連を「自動マジック」で結びつけていないという問題がありますが、そのためにエンティティの追加/削除メソッドを更新できます。
https://gist.github.com/Ocramius/3121916
ザ・例以下は、OPのプロジェクト/カテゴリスキーマに基づいています。 テーブルはManyToMany
リレーションシップテーブルであり、project
テーブルとcategory
テーブルはプライマリキーid
を使用するものとします。
class Project
{
/**
* @ORM\ManyToMany(targetEntity="Category", inversedBy="projects")
* @ORM\JoinTable(
* name="project_category",
* joinColumns={
* @ORM\JoinColumn(name="project", referencedColumnName="id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="category", referencedColumnName="id")
* }
*)
*/
protected $categories;
public function __construct()
{
$this->categories = new ArrayCollection();
}
/**
* @param Category $category
*/
public function removeCategory(Category $category)
{
if (!$this->categories->contains($category)) {
return;
}
$this->categories->removeElement($category);
$category->removeProject($this);
}
}
class Category
{
/**
* @ORM\ManyToMany(targetEntity="Project", mappedBy="categories")
*/
protected $projects;
public function __construct()
{
$this->projects = new ArrayCollection();
}
/**
* @param Project $project
*/
public function removeProject(Project $project)
{
if (!$this->projects->contains($project)) {
return;
}
$this->projects->removeElement($project);
$project->removeCategory($this);
}
}
その後、すべてを行う必要がある代わりに、両方の、removeCategory
またはremoveProject
メソッドを呼び出すことです。同じことをaddCategory
とaddProject
の方法にも適用できます。
$project = $em->find('Entities\Project', $projectId);
$category = $em->getReference('Entities\Category', $categoryId);
$project->removeCategory($category);
$em->flush();
誰でも知っていますか?私はすべてをteeied ..私はプロジェクトを削除することができますまた、それは多くのテーブルから削除されますが、今回は、私はそれらをリンク解除したい。私はそれらが存在する必要がありますが、カテゴリに関連付けられていません。 –