【问题标题】:How to use "not between" in cakephp 3.x如何在 cakephp 3.x 中使用“not between”
【发布时间】:2016-01-23 06:42:18
【问题描述】:

我想查询不在 cakephp 3.x 之间

我可以像这样使用。但我不能使用不在之间。

array(function ($exp) use ($field_value, $txtRule1, $txtRule2) {
    return $exp->between($field_value, $txtRule1, $txtRule2);
});

任何人都知道如何在 cakephp 3.x 中使用 not between

感谢和最好的问候。

【问题讨论】:

    标签: php cakephp cakephp-3.0 query-builder negation


    【解决方案1】:

    只需将其包裹在QueryExpression::not()

    use \Cake\Database\Expression\BetweenExpression;
    use \Cake\Database\Expression\QueryExpression;
    
    // ...
    
    function (QueryExpression $exp) use ($field_value, $txtRule1, $txtRule2) {
        return
            $exp->not(
                new BetweenExpression(
                    $field_value,
                    $txtRule1,
                    $txtRule2,
                    $exp->typeMap()->type($field_value)
                )
            );
    }
    

    新的表达式实例是必需的,否则您会将表达式嵌套在其自身中,这会在某些时候导致无限循环。如果您确定使用的是空表达式实例,也可以使用克隆

    function (QueryExpression $exp) use ($field_value, $txtRule1, $txtRule2) {
        $between = clone $exp;
        return
            $exp->not(
                $between->between($field_value, $txtRule1, $txtRule2)
            );
    }
    

    或将查询实例传递给可调用对象并创建一个新的查询表达式实例

    function (QueryExpression $exp) use ($field_value, $txtRule1, $txtRule2, $query) {
        return
            $exp->not(
                $query->newExpr()->between($field_value, $txtRule1, $txtRule2)
            );
    }
    

    另见

    【讨论】:

      猜你喜欢
      • 2018-08-30
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多