0
我有關係ManyToMant照片和標籤,我需要找到照片具有exectly一些標籤ID,我嘗試「在」的功能,但是當我發送兩個標籤ID(1,2)我已創建查詢照片,其中有一個標籤與ID 1.如何找到照片,只有一些標籤id?Symfony的主義與多對多關係
THISIS我的實體
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照片時(GET> 1標籤ID),當GET = 1點標籤的ID我有我的照片
響應時嘗試這樣有一些像」 「
$orX = $qb->expr()->orX();
foreach ($tagIds as $id) {
$orX->add($qb->expr()->eq('t.id', $id));
}
$qb->andWhere($orX);
照片誰對或多個標籤ID從查詢
這'is_array( $ tagIds = $ parameterBag-> get('tag_ids')'很醜。 – keyboardSmasher
@keyboardSmasher你的命題更漂亮這個參數是什麼? –
我只是說這是一個定義變量的地方。 – keyboardSmasher