Можно ли создать запрос на основе двух внешних ключей, используя класс EntityManagerInterface? - PullRequest
1 голос
/ 26 сентября 2019

Я пытаюсь создать запрос с двухуровневой ссылкой, которая будет возвращать предложения.

Уже я использую метод createQueryBuilder, в любом случае мой запрос выглядит очень хорошо.Но у меня все еще есть эта проблема:

[Семантическая ошибка] строка 0, столбец 47 рядом с 'CarManufacturer': Ошибка: У класса App \ Entity \ Offer нет поля или ассоциации с именем model.CarManufacturer

//$manufacturer - string from GET
public function getOffersByManufacturer($manufacturer):
    {
       return $this->em->getRepository(Offer::class)
            ->createQueryBuilder('p')
            ->select('p')
            ->andWhere('p.model.CarManufacturer = :manufacturer')
            ->setParameter('manufacturer', $manufacturer)
            ->getQuery()
            ->execute();
    }

В любом случае предложение Table имеет внешний ключ (ManyToOne) для Model, а следующая модель (Entity) имеет внешний ключ (ManyToOne) для CarManufacturer (Entity)

Я хотел бы получить что-токак это с помощью пружины

public List<Offer> getOffersByManufacturer(int manuacturerId):
{
   String jpql = "select o from Offer o where o.carModel.manufacturer.id = :id order by o.title";
   TypedQuery<Offer> query = em.createQuery(jpql, Offer.class);
   query.setParameter("id", manuacturerId);
   return query.getResultList();
}

1 Ответ

0 голосов
/ 27 сентября 2019

Заменить:

->andWhere('p.model.CarManufacturer = :manufacturer')

На:

->innerJoin('p.model', 'm')
->andWhere('m.CarManufacturer = :manufacturer')

Или:

use Doctrine\ORM\Query\Expr\Join;

->innerJoin('p.model', 'm', Join::WITH, 'm.CarManufacturer = :manufacturer')
...