0

教义 2 文档指出:

删除两个实体之间的关联也同样简单。有两种策略可以做到这一点,按键和元素。

“按键”是什么意思?它是id相关实体的字段还是只是相关实体在集合中的位置?例如这里$ithComment使用(即注释的位置):

// Remove by Key
$user->getComments()->remove($ithComment);
$comment->setAuthor(null);
4

3 回答 3

1

它是集合中相关实体的位置。在检查 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;
}

您可以看到没有使用对集合项标识符的引用。

于 2012-06-12T16:09:38.737 回答
0

我有解决方案,也许对你有好处:

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]);
    }
}
于 2013-12-10T12:34:51.110 回答
0

根据 Doctrine2 API,一个 Doctrine Collection 的 remove 方法,

“从集合中删除指定索引处的元素”

(见https://github.com/doctrine/common/blob/master/lib/Doctrine/Common/Collections/Collection.php#L78

我的结论是,你说的关键确实是相关实体的位置。

于 2012-06-12T14:21:58.350 回答