CakePHP 3 построитель запросов с двумя одинаковыми значениями - PullRequest
1 голос
/ 22 июня 2019

Как я могу изменить свой построитель запросов CakePHP 3, чтобы он мог иметь две «похожие» функции со значениями (логической функции «ИЛИ»)?

Это работает:

$exp->eq('b2','my_value')->like('b3','%'.$value.'%')

Я хотел бы что-то вроде этого (это не работает):

$exp->eq('b2','my_value')->like('b3','%'.$valueB3.'%')->like('b4','%'.$valueB4.'%')

1 Ответ

2 голосов
/ 23 июня 2019

Если не указано иное, построитель выражений будет объединять операторы через AND. Если вы хотите использовать OR в построителе выражений, используйте метод or_() и передайте полученный новый объект выражения туда, где он вам нужен, например:

$exp
    ->eq('b2', 'my_value')
    ->add($exp->or_(
        function (\Cake\Database\Expression\QueryExpression $or) use ($valueB3, $valueB4) {
            return $or
                ->like('b3', '%' . $valueB3 . '%')
                ->like('b4', '%' . $valueB4 . '%');
        }
    ));

Это даст:

b2 = 'my_value' AND (b3 LIKE '%valueB3%' OR b4 LIKE '%valueB4%')

Смотри также

...