Class Yiisoft\Db\QueryBuilder\Condition\Builder\NotBuilder
| Inheritance | Yiisoft\Db\QueryBuilder\Condition\Builder\NotBuilder |
|---|---|
| Implements | Yiisoft\Db\Expression\ExpressionBuilderInterface |
Build an object of {@see Not} into SQL expressions.
Public Methods
| Method | Description | Defined By |
|---|---|---|
| __construct() | Yiisoft\Db\QueryBuilder\Condition\Builder\NotBuilder | |
| build() | Build SQL for {@see Not}. | Yiisoft\Db\QueryBuilder\Condition\Builder\NotBuilder |
Protected Methods
| Method | Description | Defined By |
|---|---|---|
| createNegatedCondition() | Yiisoft\Db\QueryBuilder\Condition\Builder\NotBuilder |
Method Details
| public mixed __construct ( Yiisoft\Db\QueryBuilder\QueryBuilderInterface $queryBuilder ) | ||
| $queryBuilder | Yiisoft\Db\QueryBuilder\QueryBuilderInterface | |
public function __construct(private readonly QueryBuilderInterface $queryBuilder) {}
Build SQL for {@see Not}.
| public string build ( Yiisoft\Db\QueryBuilder\Condition\Not $expression, array &$params = [] ) | ||
| $expression | Yiisoft\Db\QueryBuilder\Condition\Not | |
| $params | array | |
| throws | InvalidArgumentException | |
|---|---|---|
| throws | Yiisoft\Db\Exception\NotSupportedException | |
public function build(ExpressionInterface $expression, array &$params = []): string
{
$condition = is_array($expression->condition)
? $this->queryBuilder->createConditionFromArray($expression->condition)
: $expression->condition;
if ($condition === null || $condition === '') {
return '';
}
if ($condition instanceof ConditionInterface) {
$negatedCondition = $this->createNegatedCondition($condition);
if ($negatedCondition !== null) {
return $this->queryBuilder->buildCondition($negatedCondition, $params);
}
}
$sql = $this->queryBuilder->buildCondition($condition, $params);
return $sql === '' ? '' : "NOT ($sql)";
}
protected function createNegatedCondition(ConditionInterface $condition): array|string|ExpressionInterface|null
{
return match ($condition::class) {
LessThan::class => new GreaterThanOrEqual($condition->column, $condition->value),
LessThanOrEqual::class => new GreaterThan($condition->column, $condition->value),
GreaterThan::class => new LessThanOrEqual($condition->column, $condition->value),
GreaterThanOrEqual::class => new LessThan($condition->column, $condition->value),
In::class => new NotIn($condition->column, $condition->values),
NotIn::class => new In($condition->column, $condition->values),
Between::class => new NotBetween(
$condition->column,
$condition->intervalStart,
$condition->intervalEnd,
),
NotBetween::class => new Between(
$condition->column,
$condition->intervalStart,
$condition->intervalEnd,
),
Equals::class => new NotEquals($condition->column, $condition->value),
NotEquals::class => new Equals($condition->column, $condition->value),
Exists::class => new NotExists($condition->query),
NotExists::class => new Exists($condition->query),
Like::class => new NotLike(
$condition->column,
$condition->value,
$condition->caseSensitive,
$condition->escape,
$condition->mode,
$condition->conjunction,
),
NotLike::class => new Like(
$condition->column,
$condition->value,
$condition->caseSensitive,
$condition->escape,
$condition->mode,
$condition->conjunction,
),
Not::class => $condition->condition,
default => null,
};
}
Signup or Login in order to comment.