옵션에 따라 빌라를 필터링 할 수있는 웹 사이트를 구축 중입니다. 예를 들면 다음과 같습니다. 별장에는 Wi-Fi, 수영장, 동물 허용 옵션이 있습니다.Doctrine 2 manyToMany relation AND로 엔터티 선택
필터링 할 때 Wi-Fi 및 풀 옵션을 제공합니다. 이제는이 옵션들 모두에 기반한 빌라의 필터링 된 목록이 필요합니다. 그래서 Wi-Fi와 풀을 모두 갖춘 빌라를 원합니다.
class Object
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @ORM\manyToMany(targetEntity="Option", mappedBy="objects")
*/
private $options;
//...
}
그리고 내 옵션 엔티티는 다음과 같습니다 :
내 빌라 엔티티는 다음과 같습니다
class Option
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $tag;
/**
* @ORM\manyToMany(targetEntity="Object", inversedBy="options")
* @ORM\JoinTable(name="Object_Options")
*/
private $objects;
//...
}
내가 필터링 할 필요가있는 필터 IDS $filters
의 배열을 가지고있다.
나는 이것을 수행하는 방법을 알 수없는 것 같습니다.
는 지금이
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select("o")->from("Object", "o");
if ($filters && count($filters) > 0) {
$qb->innerJoin("o.options", "f");
$qb->andWhere($qb->expr()->in("f.id", $filters));
}
$query = $qb->getQuery();
이 있지만 이것은 실제로 내가 원하는 것과 반대를한다. 이 옵션에 따라 별장을 필터링하지만 AND 대신 OR를 사용합니다. 그래서 빌라가 Wi-Fi 또는 풀을 가지고있는 곳의 결과가 나옵니다.
그래서 의사에 내가 필요한 코드 :
get all Objects that have every given option (and maybe more)
어느 한이 되거 수 있습니까?
솔루션을 게시 해 주셔서 감사합니다. 그건 그렇고, 자신의 질문에 대답하고 답을 채점하는 것은 완벽합니다. 실제로 문제를 해결 된 것으로 표시하는 것이 더 좋습니다. –
이 정보를 주셔서 감사합니다 Slava Formin II. 나는 보통의 포스터가 아니기 때문에 (매우 늦은 반응으로 볼 수 있듯이.) 그래서 나는 가능한 옵션을 알지 못했다. 감사. 그것이 너를 도왔 으면 좋겠다. –