العقيدة 2 إزالة علاقة متعانى
-
01-10-2019 - |
سؤال
لدي كيان جماعي مع عضو في الفصل التالي ورسم الخرائط:
/**
* @ManyToMany(targetEntity="Group", cascade={"persist"})
* @JoinTable(name="groups_children",
* joinColumns={@JoinColumn(name="group_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="child_id", referencedColumnName="id", unique=true)}
* )
*/
private $children;
إضافة طفل تافهة:
public function addChild(Group $group)
{
if (! $this->hasChild($group)) {
$this->children[] = $group;
App::getEntityManager()->persist($this);
}
}
إزالة الطفل:
???????
كيف يمكنني إزالة طفل؟
المحلول
عندما يسترجع العقيدة قائمة القيم من العلاقة ، فإنها تستخدم مثيلًا ArrayCollection على عكس صفيف منتظم.
ArrayCollection ينفذ ArrayAccess ، مما يعني ذلك unset
يعمل على ما يرام.
ومع ذلك ، فإن طريقة أبسط للقيام بذلك ستكون:
$this->getChildren()->removeElement($child) // to remove by object
$this->getChildren()->remove($index) // to remove by array index
على الرغم من أنني في حيرة من أمري مع مثالك الحالي. لماذا تفترض أن معرف الطفل ومعرف المجموعة يجب أن يكون متطابقًا في جدول الانضمام؟ ولماذا تضيف مثالك في إضافة $group
إلى $children[]
مجموعة مصفوفة؟ لا تعني أن تكون حرجًا ، ولكنه يجعل تحليل نيتك أمرًا صعبًا.
نصائح أخرى
public function removeChild(Group $group)
{
foreach ($this->getChildren() as $key => $child)
{
if ($child->getId() == $group->getId())
unset($this->children[$key]);
break;
}
}
هذا يعمل. هل هي الطريقة الأكثر كفاءة رغم ذلك؟
استخدم ArrayCollection :: removeElement
لا تنتمي إلى StackOverflow