-
Notifications
You must be signed in to change notification settings - Fork 4
/
FluidColumnOptions.php
112 lines (97 loc) · 2.53 KB
/
FluidColumnOptions.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php
namespace TheCodingMachine\FluidSchema;
use Doctrine\DBAL\Schema\Column;
use Doctrine\DBAL\Types\Type;
class FluidColumnOptions
{
/**
* @var FluidTable
*/
private $fluidTable;
/**
* @var Column
*/
private $column;
/**
* @var NamingStrategyInterface
*/
private $namingStrategy;
/**
* FluidColumn constructor.
* @param FluidTable $fluidTable
* @param Column $column
*/
public function __construct(FluidTable $fluidTable, Column $column, NamingStrategyInterface $namingStrategy)
{
$this->fluidTable = $fluidTable;
$this->column = $column;
$this->namingStrategy = $namingStrategy;
}
/**
* Makes the column not nullable.
* @return FluidColumnOptions
*/
public function notNull(): FluidColumnOptions
{
$this->column->setNotnull(true);
return $this;
}
/**
* Makes the column nullable.
* @return FluidColumnOptions
*/
public function null(): FluidColumnOptions
{
$this->column->setNotnull(false);
return $this;
}
/**
* Automatically add a unique constraint for the column.
*
* @return FluidColumnOptions
*/
public function unique(): FluidColumnOptions
{
$this->column->setCustomSchemaOption('unique', true);
return $this;
}
/**
* Automatically add an index for the column.
*
* @return FluidColumnOptions
*/
public function index(): FluidColumnOptions
{
$this->fluidTable->index([$this->namingStrategy->quoteIdentifier($this->column->getName())]);
return $this;
}
public function comment(string $comment): FluidColumnOptions
{
$this->column->setComment($comment);
return $this;
}
public function autoIncrement(): FluidColumnOptions
{
$this->column->setAutoincrement(true);
return $this;
}
public function primaryKey(?string $indexName = null): FluidColumnOptions
{
$newIndexName = $indexName ?: false;
$this->fluidTable->primaryKey([$this->namingStrategy->quoteIdentifier($this->column->getName())], $newIndexName);
return $this;
}
public function default($defaultValue): FluidColumnOptions
{
$this->column->setDefault($defaultValue);
return $this;
}
public function then(): FluidTable
{
return $this->fluidTable;
}
public function column($name): FluidColumn
{
return $this->fluidTable->column($name);
}
}