0

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

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

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

任何人都知道如何在 cakephp 3.x 之间使用 not

谢谢和最好的问候。

4

1 回答 1

2

只需将其包装在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)
        );
}

也可以看看

于 2016-01-23T09:04:28.717 回答