0 follower

Class Yiisoft\Db\QueryBuilder\Condition\Builder\NotBuilder

InheritanceYiisoft\Db\QueryBuilder\Condition\Builder\NotBuilder
ImplementsYiisoft\Db\Expression\ExpressionBuilderInterface

Build an object of {@see Not} into SQL expressions.

Method Details

Hide inherited methods

__construct() public method

public mixed __construct ( Yiisoft\Db\QueryBuilder\QueryBuilderInterface $queryBuilder )
$queryBuilder Yiisoft\Db\QueryBuilder\QueryBuilderInterface

                public function __construct(private readonly QueryBuilderInterface $queryBuilder) {}

            
build() public method

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)";
}

            
createNegatedCondition() protected method

protected array|string|Yiisoft\Db\Expression\ExpressionInterface|null createNegatedCondition ( Yiisoft\Db\QueryBuilder\Condition\ConditionInterface $condition )
$condition Yiisoft\Db\QueryBuilder\Condition\ConditionInterface

                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,
    };
}