CakePHP 3查询生成器,具有两个相似的值

时间:2019-06-22 20:43:24

标签: cakephp conditional-statements query-builder cakephp-3.x

如何修改CakePHP 3查询生成器,使其具有两个带有值(“或”逻辑函数)的“赞”函数?

这有效:

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

我想要这样的东西(它不起作用):

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

1 个答案:

答案 0 :(得分:2)

除非另有说明,否则表达式构建器将通过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%')

另请参见