我有关系ManyToMant照片和标签,我需要找到有一些标签id的照片,我尝试“in”功能,但是当我发送两个标签id(1,2)时,我有一张标签带有id的照片1.如何查找具有一些标签ID的照片?
这是我的实体
class Photo
{
use Timestampable;
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @Annotation\Groups({
* "get_photo"
* })
*/
private $id;
/**
* @var Tags[]|ArrayCollection
* @ORM\ManyToMany(targetEntity="Tags", inversedBy="photo")
* @Annotation\Type("Relation<AppBundle\Entity\Tags>")
* @Annotation\SerializedName("tag_ids")
* @Annotation\Accessor(setter="setSerializedTag")
* @Annotation\Groups({
* "post_photo", "get_photo", "put_photo"
* })
*/
protected $tags;
和标签
class Tags
{
use Timestampable;
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @Annotation\Groups({"get_tag"})
*/
private $id;
/**
* @var Photo[]|ArrayCollection
*
* @ORM\ManyToMany(targetEntity="Photo", mappedBy="tags")
*/
protected $photo;
和我的查询,在$parameterBag->get('tag_ids')
示例中[1,2]:
/**
* {@inheritdoc}
*/
public function getPhotoByParameters(
ParameterBag $parameterBag,
) {
$em = $this->getEntityManager();
$qb = $em->createQueryBuilder();
$qb
->select('p')
->from('AppBundle:Photo', 'p')
->leftJoin('p.tags', 't');
if ($parameterBag->get('tag_ids') !== null
&& is_array($tagIds = $parameterBag->get('tag_ids'))
) {
$qb->andWhere($qb->expr()->in('t.id', $parameterBag->get('tag_ids')));
}
$query = $qb->getQuery();
$results = $query->getResult();
return $results;
}
在结果之后,我需要有照片,标签1和标签ID 2.不仅标签为id 1 exanple或2
尝试时
$andX = $qb->expr()->andX();
foreach ($tagIds as $id) {
$andX->add($qb->expr()->eq('t.id', $id));
}
$qb->andWhere($andX);
我有0张照片(当获得&gt; 1标签ID时),当get = 1标签ID时,我对我的照片有回复
当这样的尝试有类似“in”
的东西时 $orX = $qb->expr()->orX();
foreach ($tagIds as $id) {
$orX->add($qb->expr()->eq('t.id', $id));
}
$qb->andWhere($orX);
来自查询
的一个或多个标签ID的照片答案 0 :(得分:0)
我解决了我的问题
if ($parameterBag->get('tag_ids') !== null
&& is_array($tagIds = $parameterBag->get('tag_ids'))
) {
$qb->andWhere($qb->expr()->in('t.id', $parameterBag->get('tag_ids')));
$qb->groupBy('p.id');
$qb->having('COUNT(t.id) = :tagIds');
$qb->setParameter('tagIds', count($parameterBag->get('tag_ids')));
}
那就是