0

Doctrine 2のドキュメントには、次のように記載されています。

2つのエンティティ間の関連付けを削除することも同様に簡単です。これを行うには、キーと要素の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

DoctrineコレクションのremoveメソッドであるDoctrine2APIによると、

「指定されたインデックスの要素をコレクションから削除します」

https://github.com/doctrine/common/blob/master/lib/Doctrine/Common/Collections/Collection.php#L78を参照)

私の結論は、あなたが話している鍵は確かに関連する実体の位置であるということです。

于 2012-06-12T14:21:58.350 に答える
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 に答える