У меня есть объект, Offer
с отношением ManyToMany к Country
Entity (т.е. предложение может быть доступно на многих странах)Доктрина EntityRepository, запросить ManyToMany отношения массива
Class Offer
{
[...]
/**
* @ORM\ManyToMany(targetEntity="Country")
* @ORM\JoinTable(
* name="offer_cc",
* joinColumns={
* @ORM\JoinColumn(name="offer_id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="cc", referencedColumnName="cc")
* }
*)
*/
private $countries;
}
И я хочу запрос для всех предложений, которые имеют страну определенного массива.
Изображения лучше понять:
В этом случае он должен показывать только предложение 1 и предложение 2, поскольку первой Андорра и последние имеют Италию.
Из формы у меня есть ArrayCollection объектов страны.
Возможно ли это сделать в EntityRepository с построителем запросов?
Например, это, как я фильтровать payoutMode, который является простым ИНТ значение:
class OfferRepository extends EntityRepository
{
public function findAllFiltered(array $filter = [])
{
$qb = $this->createQueryBuilder('offer');
// Show only active offers
$qb->where('offer.status=1');
if($filter['payoutMode'] ?? null) {
$qb->andWhere("offer.payoutMode = :payoutMode")->setParameter(':payoutMode', $filter['payoutMode']);
}
// TODO add filter by cc, category, tags
return $qb->getQuery()->execute();
}
}
Здесь $filter['countries']
содержит:
ArrayCollection {#748 ▼
-elements: array:2 [▼
0 => Country {#762 ▼
-cc: "AD"
}
1 => Country {#769 ▼
-cc: "IT"
}
]
}
Нам нужен код, который обрабатывает форму фильтра, и тот, который делает запрос на основе этих фильтров. –
Я добавил код репозитория –