教义 2 文档指出:
删除两个实体之间的关联也同样简单。有两种策略可以做到这一点,按键和元素。
“按键”是什么意思?它是id
相关实体的字段还是只是相关实体在集合中的位置?例如这里$ithComment
使用(即注释的位置):
// Remove by Key
$user->getComments()->remove($ithComment);
$comment->setAuthor(null);
教义 2 文档指出:
删除两个实体之间的关联也同样简单。有两种策略可以做到这一点,按键和元素。
“按键”是什么意思?它是id
相关实体的字段还是只是相关实体在集合中的位置?例如这里$ithComment
使用(即注释的位置):
// Remove by Key
$user->getComments()->remove($ithComment);
$comment->setAuthor(null);
它是集合中相关实体的位置。在检查 ArrayCollection..
public function add($value)
{
$this->_elements[] = $value;
return true;
}
public function remove($key)
{
if (isset($this->_elements[$key])) {
$removed = $this->_elements[$key];
unset($this->_elements[$key]);
return $removed;
}
return null;
}
您可以看到没有使用对集合项标识符的引用。
我有解决方案,也许对你有好处:
public function addSectors(ArrayCollection $sectors)
{
foreach($sectors as $k => $sector) {
$this->addSector($sector);
}
}
public function removeSectors($sectors)
{
foreach($sectors as $k => $sector) {
unset($this->sectors[$k]);
}
}
根据 Doctrine2 API,一个 Doctrine Collection 的 remove 方法,
“从集合中删除指定索引处的元素”
(见https://github.com/doctrine/common/blob/master/lib/Doctrine/Common/Collections/Collection.php#L78)
我的结论是,你说的关键确实是相关实体的位置。