db

Форк
0
/
HavingStatement.php 
60 строк · 1.6 Кб
1
<?php
2

3
namespace Upside\Db\SQL;
4

5
class HavingStatement
6
{
7
    protected SQLStatement $sql;
8

9
    protected HavingExpression $expression;
10

11
    public function __construct(?SQLStatement $statement = null)
12
    {
13
        if ($statement === null) {
14
            $statement = new SQLStatement();
15
        }
16

17
        $this->sql = $statement;
18
        $this->expression = new HavingExpression($statement);
19
    }
20

21
    public function __clone()
22
    {
23
        $this->sql = clone $this->sql;
24
        $this->expression = new HavingExpression($this->sql);
25
    }
26

27
    protected function add_condition(string|\Closure|Expression $column, ?\Closure $value = null, string $separator = 'AND'): static
28
    {
29
        if (($column instanceof \Closure) && $value === null) {
30
            $this->sql->add_having_group_condition($column, $separator);
31
        } else {
32
            $expr = $this->expression->init($column, $separator);
33
            if ($value) {
34
                $value($expr);
35
            }
36
        }
37

38
        return $this;
39
    }
40

41
    public function get_sql_statement(): SQLStatement
42
    {
43
        return $this->sql;
44
    }
45

46
    public function having(string|\Closure|Expression $column, \Closure $value = null): static
47
    {
48
        return $this->add_condition($column, $value, 'AND');
49
    }
50

51
    public function andHaving(string|\Closure|Expression $column, ?\Closure $value = null): static
52
    {
53
        return $this->add_condition($column, $value, 'AND');
54
    }
55

56
    public function orHaving(string|\Closure|Expression $column, ?\Closure $value = null): static
57
    {
58
        return $this->add_condition($column, $value, 'OR');
59
    }
60
}
61

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.