Пожалуйста, я новичок в Symfony, и у меня есть 2 сущности: category
и professionnal
со ORM многие ко многим. А «Город» - это организация с ORM oneToMany с «профессией».
В professionnel
у меня есть свойство city
. Я хочу показать professionnal
, сгруппированные по categories
, у которых есть специальный cityId
, помещенный в параметр в URL.
Я поставил этот запрос на sql
(например, city_id = 10873)
, это дает мне результаты.
SELECT * FROM sub_category AS a LEFT JOIN professionnel ON professionnel.city_id = 10873
но я не знаю, как писать с помощью querybuilder.
Я поставил это решение, но у меня есть ошибки:
$city = $paramFetcher->get('city');
$queryBuilder = $em->getRepository(SubCategory::class)
->createQueryBuilder('a')
->leftJoin('App\Entity\Professionnel','p')
->where('p.city = :city')
->setParameter('city', $city);
return $queryBuilder->getQuery()->getResult();
в журнале:
request.CRITICAL: Uncaught PHP Exception Doctrine\DBAL\Exception\SyntaxErrorException: "An exception occurred while executing 'SELECT c0_.id AS id_0, c0_.name AS name_1 FROM category c0_ LEFT JOIN professionnel p1_ WHERE p1_.city_id = ?' with params ["10873"]: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE p1_.city_id = '10873'' at line 1"
Я также ищу по форумам и обнаружил, что могу заменить «ON» leftJoin следующим образом, но показывает мне все профессионалы:
$city = $paramFetcher->get('city');
$queryBuilder = $em->getRepository(SubCategory::class)
->createQueryBuilder('a')
->leftJoin('App\Entity\Professionnel','p','WITH','p.city = :city')
->setParameter('city', $city);
return $queryBuilder->getQuery()->getResult();
Для сопоставления я поставил это так:
class Category
{
/**
* Many professionnels have Many categories.
* @ORM\ManyToMany(targetEntity="App\Entity\Professionnel", mappedBy="Categories")
* @ORM\JoinTable(name="professionnel_category")
*/
private $professionnels;
}
class Professionnel extends User
{
/**
* Many professionel have Many categories.
* @ORM\ManyToMany(targetEntity="App\Entity\Category", inversedBy="professionnels")
* @Groups({"Default", "professionnel", "user"})
*/
private $categories;
}
Большое спасибо за вашу помощь.