Я настраиваю расширенный поиск для доски вакансий, у меня есть 3 запроса, которые работают отдельно, но я не могу согласиться с ними в 1.
В моей сущности Объявление:
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Contract", inversedBy="adverts", cascade={"persist"})
*/
private $contracts;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Sector", inversedBy="adverts", cascade={"persist"})
*/
private $sectors;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Profession", inversedBy="adverts", cascade={"persist"})
*/
private $professions;
Мои 3 отдельных запроса:
public function findByProfession($profession)
{
$query = $this->createQueryBuilder('a');
$query->innerJoin('a.professions', 'p');
$query->addSelect('p');
$query->andWhere('p.id IN (:id)');
$query->setParameter('id', $profession);
return $query->getQuery()->getResult();
}
public function findBySector($sector)
{
$query = $this->createQueryBuilder('a');
$query->innerJoin('a.sectors', 's');
$query->addSelect('s');
$query->andWhere('s.id IN (:id)');
$query->setParameter('id', $sector);
return $query->getQuery()->getResult();
}
public function findByContract($contract)
{
$query = $this->createQueryBuilder('a');
$query->innerJoin('a.contracts', 'c');
$query->addSelect('c');
$query->andWhere('c.id IN (:id)');
$query->setParameter('id', $contract);
return $query->getQuery()->getResult();
}
И что я пробовал:
public function findBySearchField($data)
{
$query = $this->createQueryBuilder('a');
$query->innerJoin('a.company', 'c', 'WITH', 'c.isActive = true');
$query->addSelect('c');
$query->andWhere('a.isActive = true');
$query ->orderBy('a.postedAt', 'DESC');
if (!empty($data->getProfessions())) {
$query->innerJoin('a.professions', 'pro')
->addSelect('pro')
->andWhere('pro.id IN (:id)')
->setParameter('id', $data->getProfessions());
}
if (!empty($data->getSectors())) {
$query->innerJoin('a.sectors', 'sec')
->addSelect('sec')
->andWhere('sec.id IN (:id)')
->setParameter('id', $data->getSectors());
}
if (!empty($data->getContracts())) {
$query->innerJoin('a.contracts', 'con')
->addSelect('con')
->andWhere('con.id IN (:id)')
->setParameter('id', $data->getContracts());
}
return $query->getQuery()->getResult()
;
}
Я не понимаю, почему мои запросы работают раздельно, но не тогда, когда я согласен с ними.если кто-то увидит, где есть проблема, это действительно поможет мне!