Я хочу, чтобы запрос не между в CakePHP 3.x
Я могу использовать между вот так. Но я не могу использовать не между.
array(function ($exp) use ($field_value, $txtRule1, $txtRule2) {
return $exp->between($field_value, $txtRule1, $txtRule2);
});
Любой имеет представление о том, как использовать не между в CakePHP 3.x
Спасибо и всего наилучшего.
Просто заверните это в 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)
);
}
Смотрите также
Других решений пока нет …