0 レビュー
1 回答
php-Doctrineクエリ:多対多の関連付けで配列を含むエンティティを検索します
多対多の関係にあるエンティティService
とエンティティTag
があります。提供されたすべてのタグを含むService
を取得するにはどうすればよいですか?
class Service{
/ **
* @ORM \ ManyToMany(targetEntity = "Tag"、mappedBy = "serviceList")
* /
プライベート$tagList;
}
クラス{-コード-2}{
/ **
* @ORM \ ManyToMany(targetEntity = "Service"、inversedBy = "tagList")
* @ORM \ JoinTable(name = "tags_services")
* /
プライベート$serviceList;
}
これで、Serviceリポジトリでこれを実行します:
$qb = $this->createQueryBuilder('service');
$qb->leftJoin('service.tagList', 'tag');
$tagArray = explode(",", $tagList);
$qb->expr()->in('tag.id', $tagArray);
しかし、このクエリは、すべてではなく、提供されたタグの少なくとも1つを含むServiceを返します。
このクエリを$qb->expr()->*
メソッドで実装することは可能ですか?
わからない
0
レビュー
答え :
解決策:
コメントのCeradが示唆しているように、取得する各タグのwhere/andWhere条件を追加する必要がありますすべてのタグが付いたサービス:
$qb = $this->createQueryBuilder('service');
$qb->leftJoin('service.tagList', 'tag');
$tagArray = explode(",", $tagList);
$i = 0;
foreach($tagArray as $tag){
if($i == 0){
$qb->where('tag.id = :tag'.$i);
} else {
$qb->andWhere('tag.id = :tag'.$i);
}
$qb->setParameters('tag'.$i, $tag);
$i++;
}
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。