1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace carono\yii2migrate; |
4
|
|
|
|
5
|
|
|
/** |
6
|
|
|
* Class PivotColumn |
7
|
|
|
* |
8
|
|
|
* @package carono\yii2installer |
9
|
|
|
*/ |
10
|
|
|
class PivotColumn |
11
|
|
|
{ |
12
|
|
|
protected $_refTable = null; |
13
|
|
|
protected $_refColumn = null; |
14
|
|
|
protected $_sourceTable = null; |
15
|
|
|
protected $_sourceColumn = null; |
16
|
|
|
protected $_name = null; |
17
|
|
|
protected $_tableName = null; |
18
|
|
|
protected $_columns = []; |
19
|
|
|
/** |
20
|
|
|
* @var Migration |
21
|
|
|
*/ |
22
|
|
|
public $migrate; |
23
|
|
|
|
24
|
|
|
/** |
25
|
|
|
* @return string |
26
|
|
|
*/ |
27
|
|
|
public function __toString() |
28
|
|
|
{ |
29
|
|
|
return 'pv'; |
30
|
|
|
} |
31
|
|
|
|
32
|
|
|
/** |
33
|
|
|
* @param $migrate |
34
|
|
|
* @return $this |
35
|
|
|
*/ |
36
|
|
|
public function setMigrate($migrate) |
37
|
|
|
{ |
38
|
|
|
$this->migrate = $migrate; |
39
|
|
|
return $this; |
40
|
|
|
} |
41
|
|
|
|
42
|
|
|
/** |
43
|
|
|
* @param $name |
44
|
|
|
* @return $this |
45
|
|
|
*/ |
46
|
|
|
public function setName($name) |
47
|
|
|
{ |
48
|
|
|
$this->_name = $name; |
49
|
|
|
return $this; |
50
|
|
|
} |
51
|
|
|
|
52
|
|
|
/** |
53
|
|
|
* @param $name |
54
|
|
|
* @return $this |
55
|
|
|
*/ |
56
|
|
|
public function tableName($name) |
57
|
|
|
{ |
58
|
|
|
$this->_tableName = $name; |
59
|
|
|
return $this; |
60
|
|
|
} |
61
|
|
|
|
62
|
|
|
/** |
63
|
|
|
* @param array $columns |
64
|
|
|
* @return $this |
65
|
|
|
*/ |
66
|
|
|
public function columns($columns) |
67
|
|
|
{ |
68
|
|
|
$this->_columns = $columns; |
69
|
|
|
return $this; |
70
|
|
|
} |
71
|
|
|
|
72
|
|
|
/** |
73
|
|
|
* @return mixed |
74
|
|
|
*/ |
75
|
|
|
public function getName() |
76
|
|
|
{ |
77
|
|
|
$name = $this->_tableName ? $this->_tableName : join('_', ["pv", $this->_sourceTable, $this->_name]); |
78
|
|
|
return "{{%" . Migration::setTablePrefix($name, '') . "}}"; |
79
|
|
|
} |
80
|
|
|
|
81
|
|
|
public function remove() |
82
|
|
|
{ |
83
|
|
|
if ($this->_columns) { |
|
|
|
|
84
|
|
|
$this->migrate->downNewColumns([$this->getName() => $this->_columns]); |
85
|
|
|
} |
86
|
|
|
$this->migrate->dropTable($this->getName()); |
87
|
|
|
} |
88
|
|
|
|
89
|
|
|
public function apply() |
90
|
|
|
{ |
91
|
|
|
/** |
92
|
|
|
* @var ForeignKeyColumn $type |
93
|
|
|
*/ |
94
|
|
|
$columns = [ |
95
|
|
|
$this->getSourceColumn() => $this->migrate->foreignKey($this->getSourceTable()), |
|
|
|
|
96
|
|
|
$this->getRefColumn() => $this->migrate->foreignKey($this->getRefTable()), |
|
|
|
|
97
|
|
|
]; |
98
|
|
|
$columnsInt = array_combine(array_keys($columns), [$this->migrate->integer(), $this->migrate->integer()]); |
99
|
|
|
if ($this->migrate->db->driverName == "mysql") { |
100
|
|
|
$this->migrate->createTable($this->getName(), $columnsInt); |
101
|
|
|
$this->migrate->addPrimaryKey(null, $this->getName(), array_keys($columns)); |
102
|
|
|
foreach ($columns as $name => $type) { |
103
|
|
|
$type->sourceTable($this->getName())->sourceColumn($name); |
104
|
|
|
$type->apply(); |
105
|
|
|
} |
106
|
|
|
} else { |
107
|
|
|
$this->migrate->createTable($this->getName(), $columns); |
108
|
|
|
$this->migrate->addPrimaryKey(null, $this->getName(), array_keys($columns)); |
109
|
|
|
} |
110
|
|
|
if ($this->_columns) { |
|
|
|
|
111
|
|
|
$this->migrate->upNewColumns([$this->getName() => $this->_columns]); |
112
|
|
|
} |
113
|
|
|
} |
114
|
|
|
|
115
|
|
|
/** |
116
|
|
|
* @return null |
117
|
|
|
*/ |
118
|
|
|
public function getRefTable() |
119
|
|
|
{ |
120
|
|
|
return $this->_refTable; |
121
|
|
|
} |
122
|
|
|
|
123
|
|
|
/** |
124
|
|
|
* @return mixed |
125
|
|
|
*/ |
126
|
|
|
public function getRefColumn() |
127
|
|
|
{ |
128
|
|
|
if (!$this->_refColumn) { |
129
|
|
|
$name = join("_", [$this->getRefTable(), "id"]); |
|
|
|
|
130
|
|
|
} else { |
131
|
|
|
$name = $this->_refColumn; |
132
|
|
|
} |
133
|
|
|
return Migration::setTablePrefix($name, ''); |
134
|
|
|
} |
135
|
|
|
|
136
|
|
|
/** |
137
|
|
|
* @return null |
138
|
|
|
*/ |
139
|
|
|
public function getSourceTable() |
140
|
|
|
{ |
141
|
|
|
return $this->_sourceTable; |
142
|
|
|
} |
143
|
|
|
|
144
|
|
|
/** |
145
|
|
|
* @return mixed |
146
|
|
|
*/ |
147
|
|
|
public function getSourceColumn() |
148
|
|
|
{ |
149
|
|
|
if (!$this->_sourceColumn) { |
150
|
|
|
$name = join("_", [$this->getSourceTable(), "id"]); |
|
|
|
|
151
|
|
|
} else { |
152
|
|
|
$name = $this->_sourceColumn; |
153
|
|
|
} |
154
|
|
|
return Migration::setTablePrefix($name, ''); |
155
|
|
|
} |
156
|
|
|
|
157
|
|
|
/** |
158
|
|
|
* @param $name |
159
|
|
|
* @return $this |
160
|
|
|
*/ |
161
|
|
|
public function refTable($name) |
162
|
|
|
{ |
163
|
|
|
$this->_refTable = $name; |
164
|
|
|
return $this; |
165
|
|
|
} |
166
|
|
|
|
167
|
|
|
/** |
168
|
|
|
* @param $name |
169
|
|
|
* @return $this |
170
|
|
|
*/ |
171
|
|
|
public function sourceColumn($name) |
172
|
|
|
{ |
173
|
|
|
$this->_sourceColumn = $name; |
174
|
|
|
return $this; |
175
|
|
|
} |
176
|
|
|
|
177
|
|
|
/** |
178
|
|
|
* @param $name |
179
|
|
|
* @return $this |
180
|
|
|
*/ |
181
|
|
|
public function sourceTable($name) |
182
|
|
|
{ |
183
|
|
|
$this->_sourceTable = $name; |
184
|
|
|
return $this; |
185
|
|
|
} |
186
|
|
|
|
187
|
|
|
/** |
188
|
|
|
* @param $name |
189
|
|
|
* @return $this |
190
|
|
|
*/ |
191
|
|
|
public function refColumn($name) |
192
|
|
|
{ |
193
|
|
|
$this->_refColumn = $name; |
194
|
|
|
return $this; |
195
|
|
|
} |
196
|
|
|
} |
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.
Consider making the comparison explicit by using
empty(..)
or! empty(...)
instead.