एक पुरानी पोस्ट लेकिन यह सुनिश्चित करने के लिए एक तरीका प्रदान करना चाहता था कि एसोसिएशन को प्रत्येक इकाई के संग्रह हटाने के मैन्युअल रूप से निष्पादित करने और @Rene Terstegen द्वारा उत्तर पर विस्तार करने के बजाय, सिद्धांत के ओआरएम इकाई पक्ष से हटा दिया गया था।
मुद्दा यह है कि सिद्धांत "ऑटो-जादुई" संगठनों को एक साथ जोड़ता नहीं है, फिर भी आप ऐसा करने के लिए इकाई के जोड़ें/निकालें विधियों को अपडेट कर सकते हैं।
https://gist.github.com/Ocramius/3121916
उदाहरण नीचे ओपी की परियोजना/श्रेणी स्कीमा पर आधारित है। यह मानता है कि तालिका 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();
किसी को भी पता है? मैंने सब कुछ चिढ़ाया ..मैं प्रोजेक्ट को हटा सकता हूं और यह कई से कई टेबलों को भी हटा देगा लेकिन इस बार, मैं बस उन्हें अनलिंक करना चाहता हूं। मुझे उन्हें अस्तित्व में रहने की आवश्यकता है लेकिन एक श्रेणी से जुड़ा नहीं है .. –