1

簡単にするために、1対多の関係を持つ2つのオブジェクトがあるとしましょう。

ユーザー-(1:n)->リクエスト

ユーザーは次のように定義されます

class User {
...
/** @OneToMany(targetEntity="Request", mappedBy="user", cascade={"all"}) */
   private $request;
...
}

およびリクエストは次のように定義されます

class Request {
...
/** @ManyToOne(targetEntity="User", inversedBy="request", cascade={"persist"}) */
    private $user;
...
}

ユーザーエンティティ内からユーザーに関連付けられたすべてのリクエストを削除するメソッドを作成することは可能ですか?

私が必要としているのは次のようなものです。

class User {
....
    public function removeAllMyRequests() {
        foreach ($this->getAllMyRequests() as $req)
            $this->em->remove($req);
    }
....
}

しかし、どうやら私はエンティティ内からエンティティマネージャを呼び出すことになっていないようです。

4

2 に答える 2

1

「孤立した削除」で関連付けをマークできます:

/** 
 * @Entity 
 */
class User
{
    /** 
     * @OneToMany(
     *   targetEntity="Request",
     *   mappedBy="user", 
     *   cascade={"all"}, 
     *   orphanRemoval=true
     * ) 
     */
    private $requests;
}

コレクションRequestから削除されたオブジェクトUser#requestsは、次のEntityManager#flush()呼び出し時に削除対象としてマークされます。

すべてのアイテムを一度に削除するには、次を使用するだけですDoctrine\Common\Collections\Collection#clear()

public function removeAllMyRequests() {
    $this->requests->clear();
}
于 2013-02-25T14:34:58.860 に答える
0

「カスケード」オプションを探していると思います:http://docs.doctrine-project.org/en/2.0.x/reference/working-with-associations.html#transitive-persistence-cascade-operations

于 2013-02-25T12:17:34.773 に答える