Семантическая ошибка при передаче массива в запрос
У меня есть массив с условиями, я уже подготовил передать его на запрос:
массив:
('u.registered = 1','u.active = 0', 'u.gender = M')
когда я перехожу к запросу, он работает со сравнением чисел, но не с varchar, который является M. Ошибка появляется в "пол", он говорит, что это семантическая ошибка. Я предполагаю, потому что я не использую expr()->literal('M'), но я не могу сделать это, потому что запрос "уже построен"..
Есть ли альтернативный способ, чтобы мне не пришлось заново кодировать?
это код:
public function customR($data){
// var_dump($data);die();
$this->qb = $this->em->createQueryBuilder();
$andX = $this->qb->expr()->andX();
$this->qb->select('u')
->from('models\User','u');
foreach ($data as $value){
$andX->add($value);
}
$this->qb->add('where', $andX);
$query = $this->qb->getQuery();
// var_dump($query);die();
$obj = $query->getResult();
var_dump($obj);die();
if (!empty($obj)){
return $obj;
return false;
}
}
1 ответ
Я не нашел способа сделать это, поэтому я просто немного его изменил.
Я посылаю массив с некоторыми элементами, просто чтобы получить ссылку на то, что существует, а что нет.
Итак, в моей службе данных я создал функцию, и фрагмент этой функции для решения моего вопроса заключался в следующем:
if($key == 'gender'){
foreach($value as $key=>&$v){
$condition = ('u.gender = '. $this->qb->expr()->literal($v));
$orX->add($condition);
}
}