db

Форк
0
/
ForeignKey.php 
80 строк · 1.5 Кб
1
<?php
2

3
namespace Upside\Db\Schema;
4

5
class ForeignKey
6
{
7
    protected string $ref_table;
8

9
    /** @var string[] */
10
    protected array $ref_columns;
11
    protected array $actions = [];
12

13
    /** @var string[] */
14
    protected array $columns;
15

16
    /**
17
     * @param string[] $columns
18
     */
19
    public function __construct(array $columns)
20
    {
21
        $this->columns = $columns;
22
    }
23

24
    protected function add_action(string $on, string $action): static
25
    {
26
        $action = \strtoupper($action);
27

28
        if (!\in_array($action, ['RESTRICT', 'CASCADE', 'NO ACTION', 'SET NULL'])) {
29
            return $this;
30
        }
31

32
        $this->actions[$on] = $action;
33

34
        return $this;
35
    }
36

37
    public function get_referenced_table(): string
38
    {
39
        return $this->ref_table;
40
    }
41

42
    /**
43
     * @return string[]
44
     */
45
    public function get_referenced_columns(): array
46
    {
47
        return $this->ref_columns;
48
    }
49

50
    /**
51
     * @return string[]
52
     */
53
    public function get_columns(): array
54
    {
55
        return $this->columns;
56
    }
57

58
    public function get_actions(): array
59
    {
60
        return $this->actions;
61
    }
62

63
    public function references(string $table, string ...$columns): static
64
    {
65
        $this->ref_table = $table;
66
        $this->ref_columns = $columns;
67

68
        return $this;
69
    }
70

71
    public function on_delete(string $action): static
72
    {
73
        return $this->add_action('ON DELETE', $action);
74
    }
75

76
    public function on_update(string $action): static
77
    {
78
        return $this->add_action('ON UPDATE', $action);
79
    }
80
}
81

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

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

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

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