こんにちは、ここと同じ質問があります:多対多の自己関係と余分なフィールドがありますか? しかし、答えが見つかりません:/最初にManyToOneを試し、他のサイトでOneToManyを試しました...しかし、次のようなものを使用できませんでした
public function hasFriend(User $user)
{
return $this->myFriends->contains($user);
}
この問題があったため:
This function is called, taking a User type $user variable and you then use the contains() function on $this->myFriends.
$this->myFriends は Requests の ArrayCollection (User とは異なるタイプ) であり、contains() に関する教義のドキュメントから:
The comparison of two elements is strict, that means not only the value but also the type must match.
では、追加のフィールドを使用してこの ManyToMany 関係を解決する最善の方法は何でしょうか? または、戻ってonetomanyとmanytooneの関係を設定した場合、hasFriendメソッドを変更するにはどうすればよいですか? たとえば、ID が ID の配列コレクションにあるかどうかを確認します。
編集:私はこのテーブルを持っています...そして私が必要とするのは:1.私の友達を選択してください...そして私のフォロワー...私が彼と友達であるかどうかを確認してください。(彼は私と友達になることができるので、私は彼と一緒にいる必要はありません... Twitterのように). 私は多くのことを行うことができますが、私のテーブルでわかるように、「閲覧済み」「彼が私を購読した時間」などの追加フィールドが必要です。
そして、このようなクエリを作成し、小枝でチェックできるようにします if (app.user.hasFriend(follower) またはそのようなもの)
$qb = $this->createQueryBuilder('r')
->select('u')
->innerJoin('UserBundle:User', 'u')
->Where('r.friend_id=:id')
->setParameter('id', $id)
->orderBy('r.time', 'DESC')
->setMaxResults(50);
return $qb->getQuery()
->getResult();