Files
query_builder/src/Alias/Database/Query/Insert.php
2022-09-08 17:42:20 -04:00

109 lines
2.7 KiB
PHP

<?php
namespace ProVM\Alias\Database\Query;
use ProVM\Alias\Database\Query;
use ProVM\Concept\Database\Query\Insert as InsertInterface;
use ProVM\Concept\Database\Query\Select;
abstract class Insert extends Query implements InsertInterface
{
public function into(string $table): InsertInterface
{
return $this->setTable($table);
}
public function columns(array $columns): InsertInterface
{
return $this->setColumns($columns);
}
public function values(array $values): InsertInterface
{
return $this->setValues($values);
}
public function select(Select $select): InsertInterface
{
return $this->setSelect($select);
}
protected string $table;
public function setTable(string $table): InsertInterface
{
$this->table = $table;
return $this;
}
public function getTable(): string
{
return $this->table;
}
protected array $columns;
public function setColumns(array $columns): InsertInterface
{
foreach ($columns as $column) {
$this->addColumn($column);
}
return $this;
}
public function addColumn(string $column): InsertInterface
{
$this->columns []= $column;
return $this;
}
public function getColumns(): array
{
return $this->columns;
}
public function getColumnString(): string
{
return implode(', ', $this->getColumns());
}
protected array $values;
public function setValues(array $values): InsertInterface
{
foreach ($values as $value) {
$this->addValue($value);
}
return $this;
}
public function addValue(int|string $value): InsertInterface
{
if (!is_numeric($value)) {
$value = "'{$value}'";
}
$this->values []= $value;
return $this;
}
public function getValues(): array
{
return $this->values;
}
public function getValueString(): string
{
return implode(', ', $this->getValues());
}
protected Select $select;
public function setSelect(Select $select): InsertInterface
{
$this->select = $select;
return $this;
}
public function getSelect(): Select
{
return $this->select;
}
public function build(): string
{
$query = ["INSERT INTO"];
$query []= $this->getTable();
if (isset($this->columns)) {
$query []= "({$this->getColumnString()})";
}
if (isset($this->select)) {
$query []= "{$this->getSelect()}";
return implode(' ', $query);
}
$query []= 'VALUES';
$query []= "({$this->getValueString()})";
return implode(' ', $query);
}
}