3

私は、ArticleVoteそれ自体がである 1 対多の関係を持つクラス ユーザーを持っていAssociation Classます (以下を参照)。

私のエンティティは次のようになります。

class User
{
    protected $articlesVotes;
}

ユーザーはArticleVoteコレクションを保持しています。

UserIdArticleVote は、および に基づく複合主キーによって参照されますArticleId

class ArticleVote
{
    protected $article;
    protected $user;
}

ArticleVoteここで、 fromを削除したいとしUserます。当然のことながら、コレクション内$user->getArticlesVotes()->removeElement($articleVote);のエンティティを実際に削除することになりますが、は関係とエンティティの両方であるため、データベースの行はまったく削除されません。ArticleVote

できます$em->remove($articleVote);が、ユーザーのコレクションから削除して EntityManager をバイパスできたらいいのにと思います。いくつか削除したい場合はどうすればよいですか$articleVote?

現在、エンティティをUser渡すことでモデルの投票を作成/削除します。オブジェクトを作成してそれ自体を追加するのは私のエンティティです。削除機能に対して同じ動作ができたらいいのにと思います。ArticleUserArticleVote

何か案は?(ああ、ちなみに、私はすでに cascade="remove" で試しました)

4

1 に答える 1

1

昨日、この正確な問題に遭遇しました。cascade="remove" を設定すると、UnitOfWork 内でマークされた関連付けが削除されます。ただし、アイテムをデータベースから削除するには、ArticlesVote エンティティの $user プロパティをマークして、削除時にカスケードする必要があります。そのようです..

class ArticleVote
{
    protected $article;

    /**
     * @ManyToOne(targetEntity=....
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE")
     */
    protected $user;
}

これにより、データベースの外部キーに「削除時」カスケードが追加され、削除されたユーザーに関連付けられた記事の投票が一緒に削除されます。

于 2012-09-05T10:25:55.943 に答える