почему это невозможно в доктрине
Мне нужно сделать несколько запросов, пока я пробовал разные способы, я обнаружил, что следующие строки не" распознаются " доктриной (это дает ошибки):
Например, когда я хочу сравнить, если некоторые данные в БД равны литералу, здесь условие:
('u.gender = M')
Вот как выглядит моя таблица:
id gender
1 M
2 M
3 F
Он выдает семантическую ошибку. Также при сравнении дат таким образом.
Я хотел бы знать, почему это не признается доктриной, сравнивая непосредственно с числами принимается:
Условие: ('u.age = 15')
2 ответа:
Первый вариант вы можете сделать так -
$M = 'M'; $age = 15; $query = $this->createQueryBuilder('t') ->where('u.gender = :M AND u.age = :age') ->setParameters(array('M'=> $M,'age'=>$age);
Другой способ сделать это -
$query = $this->createQueryBuilder("t") ->where("u.gender = 'M' AND u.age = 15");
Таким образом, я предполагаю, что ответ на мой вопрос будет заключаться в том, что он не работает, потому что доктрина не признает M как строку. Вот почему было необходимо использовать перевернутые запятые, как сказал @Mehedi.
Другим способом решения этой проблемы было использование построителя запросов:
Но я думаю, что это просто долго и трудно читать. Поэтому самая короткая вещь будет просто:$v = 'M'; $condition = $this->qb->expr()->eq('u.gender', $this->qb->expr()->literal($v));
$condition = ("u.gender = 'M'");