Составить запрос через QueryBuilder ManyToOne
Всем салам, в общем есть связь между механиками и сервисами ManyToOne:
Сущность Mechanic
* @ORM\ManyToOne(targetEntity=CarService::class, inversedBy="mechanics")
* @ORM\JoinColumn(nullable=false)
*/
private $carService;
В контроллере нужно создать запрос через QueryBuilder. Нужно вывести всех механиков из массива сервисов($carServices - это сущности сервисов):
$i = 0;
$qb
->leftJoin('m.carService', 'cs');
foreach ($carServices as $carService) {
$qb
->andWhere('cs.id =:id'.$i)
->setParameter('id'.$i, $carService->getId());
++$i;
}
Я попытался сделать как то так, но выводит пустой массив, работает только для одного сервиса, а если больше то пустой массив. Подскажите пожалуйста как правильно запрос составить
Ответы (2 шт):
На самом деле работает и такой вариант
->where('p.parent IS NULL and p.class = :class')
То есть в одном where можно задать много критериев поиска. В этом случае я сначала собираю в массив все критерии типа этого:
//поисковые параметры сообщения
$message = $request->query->get("message");
if ($message != null) {
$constrains [] = self::MESSAGE_TABLE_ALIAS . ".message like '%" . $message . "%'";
}
$createdAt = $request->query->get("createdAt");
if ($createdAt != null) {
$constrains [] = self::MESSAGE_TABLE_ALIAS . ".created_at = " . $createdAt;
}
//поисковые параметры отправителя сообщения
//username, email, firstname, lastname
$username = $request->query->get("username");
if ($username != null) {
$constrains[] = self::USER_TABLE_ALIAS . ".username = '" . $username . "'";
}
$email = $request->query->get("email");
if ($email != null) {
$constrains[] = self::USER_TABLE_ALIAS . ".email = '" . $email . "'";
}
$firstname = $request->query->get("firstname");
if ($firstname != null) {
$constrains[] = self::USER_TABLE_ALIAS . ".firstname = '" . $firstname . "'";
}
$lastname = $request->query->get("lastname");
if ($lastname != null) {
$constrains[] = self::USER_TABLE_ALIAS . ".lastname = '" . $lastname . "'";
}
а потом делаю implode (" and ", $constrains) и подставляю полученный результат в один where. У меня все работает. И не стоит размещать этот код в контроллерах. Используйте репозитории (см. Doctrine\ORM\EntityRepository). (Я привел пример из своего проекта как есть. И конструкции типа self::MESSAGE_TABLE_ALIAS или self::USER_TABLE_ALIAS использую для удобства, чтобы префиксы одной таблицы били везде идентичный.)