只是把它包在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-23 09:04:28
ndm