Как соотнести 3 запроса с отношением ManyToMany в 1 с Doctrine - PullRequest
0 голосов
/ 27 июня 2019

Я настраиваю расширенный поиск для доски вакансий, у меня есть 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()
    ;
}

Я не понимаю, почему мои запросы работают раздельно, но не тогда, когда я согласен с ними.если кто-то увидит, где есть проблема, это действительно поможет мне!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...