Hoa central
Insert.php
Go to the documentation of this file.
1 <?php
2 
37 namespace Hoa\Database\Query;
38 
47 class Insert implements Dml
48 {
54  protected $_into = null;
55 
61  protected $_or = null;
62 
68  protected $_columns = [];
69 
75  protected $_values = [];
76 
82  protected $_defaultValues = false;
83 
84 
85 
92  public function into($name)
93  {
94  $this->_into = $name;
95 
96  return $this;
97  }
98 
104  public function rollback()
105  {
106  return $this->_or('ROLLBACK');
107  }
108 
114  public function abort()
115  {
116  return $this->_or('ABORT');
117  }
118 
124  public function replace()
125  {
126  return $this->_or('REPLACE');
127  }
128 
134  public function fail()
135  {
136  return $this->_or('FAIL');
137  }
138 
144  public function ignore()
145  {
146  return $this->_or('IGNORE');
147  }
148 
155  protected function _or($or)
156  {
157  $this->_or = $or;
158 
159  return $this;
160  }
161 
169  public function on($column)
170  {
171  foreach (func_get_args() as $column) {
172  $this->_columns[] = $column;
173  }
174 
175  return $this;
176  }
177 
186  public function values($expression)
187  {
188  if ($expression instanceof Select) {
189  $this->_values = (string) $expression;
190  } else {
191  if (is_string($this->_values)) {
192  $this->_values = [];
193  }
194 
195  $values = &$this->_values[];
196  $values = [];
197 
198  foreach (func_get_args() as $expression) {
199  $values[] = $expression;
200  }
201  }
202 
203  return $this;
204  }
205 
211  public function defaultValues()
212  {
213  $this->_defaultValues = true;
214 
215  return $this;
216  }
217 
224  public function __get($name)
225  {
226  switch (strtolower($name)) {
227  case 'or':
228  return $this;
229 
230  default:
231  return $this->$name;
232  }
233  }
234 
240  public function __toString()
241  {
242  $out = 'INSERT';
243 
244  if (null !== $this->_or) {
245  $out .= ' OR ' . $this->_or;
246  }
247 
248  $out .= ' INTO ' . $this->_into;
249 
250  if (true === $this->_defaultValues) {
251  return $out . ' DEFAULT VALUES';
252  }
253 
254  if (!empty($this->_columns)) {
255  $out .= ' (' . implode(', ', $this->_columns) . ')';
256  }
257 
258  if (is_string($this->_values)) {
259  return $out . ' ' . $this->_values;
260  }
261 
262  $tuples = [];
263 
264  foreach ($this->_values as $tuple) {
265  $tuples[] = '(' . implode(', ', $tuple) . ')';
266  }
267 
268  return $out . ' VALUES ' . implode(', ', $tuples);
269  }
270 }
values($expression)
Definition: Insert.php:186