Семантическая ошибка при передаче массива в запрос

У меня есть массив с условиями, я уже подготовил передать его на запрос:

массив:

('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);
            }
        }
Другие вопросы по тегам