Как использовать & quot; не между & quot; в CakePHP 3.x

Я хочу, чтобы запрос не между в CakePHP 3.x

Я могу использовать между вот так. Но я не могу использовать не между.

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

Любой имеет представление о том, как использовать не между в CakePHP 3.x

Спасибо и всего наилучшего.

0

Решение

Просто заверните это в 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)
);
}

Смотрите также

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]