9

このようなオブジェクトの配列コレクションがあります

Class User
{
    private $tasks;
}

ユーザーがデータベースからロードされたら、コレクションを空またはクリアするにはどうすればよいですか。

ユーザーのクエリを実行すると、Doctrine はユーザー オブジェクトにタスクを遅延ロードしますが、最初にそれらのタスクをクリアしたい

何かのようなもの

$user->getTasks().empty()

4

1 に答える 1

22

まず、 User エンティティのコンストラクタは次のようになると思います。

class User
{
    public function __construct()
    {
        ...
        $this->tasks = new \Doctrine\Common\Collections\ArrayCollection();
        ...
    }
}

これまでのところ正しくない場合は、読むのをやめて、コメントで私を修正してください:)

ArrayCollection クラスは Doctrine によって作成されたことに注意してください。symfony とそのコンポーネントのほとんどは、クラスのドキュメント化に関して非常に優れています。そのクラスを調べると、次のことがわかります。

https://www.doctrine-project.org/api/collections/latest/Doctrine/Common/Collections/ArrayCollection.html

(もちろん、同じバージョンであることを確認してください。そうでない場合は、お使いのバージョンのドキュメントを探してください)

ドキュメントには、ArrayCollection オブジェクトで使用できるすべてのメソッドがリストされています。その中で:clear()

つまり、 User クラスに新しいメソッドを追加するとうまくいくはずです。

class User
{
    public function clearTasks()
    {
        $this->getTasks()->clear();
    }
}

次に、User オブジェクトで次のように呼び出します。

$user->clearTasks();

(データベースに永続化することを忘れないでください!)

于 2012-08-10T05:33:47.387 に答える