почему это невозможно в доктрине


Мне нужно сделать несколько запросов, пока я пробовал разные способы, я обнаружил, что следующие строки не" распознаются " доктриной (это дает ошибки):

Например, когда я хочу сравнить, если некоторые данные в БД равны литералу, здесь условие:

('u.gender = M')

Вот как выглядит моя таблица:

id  gender
 1     M
 2     M
 3     F

Он выдает семантическую ошибку. Также при сравнении дат таким образом.

Я хотел бы знать, почему это не признается доктриной, сравнивая непосредственно с числами принимается:

Условие: ('u.age = 15')

2 2

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'");