proceed further with beans
This commit is contained in:
41
Table.php
41
Table.php
@@ -10,15 +10,14 @@ use DatabaseHelper\enums\Charset;
|
||||
use DatabaseHelper\enums\Collation;
|
||||
use DatabaseHelper\enums\Type;
|
||||
use DatabaseHelper\enums\Engine;
|
||||
use InvalidArgumentException;
|
||||
|
||||
class Table
|
||||
{
|
||||
protected Schema $table;
|
||||
protected Schema $schema;
|
||||
|
||||
public function __construct(string $tableName) {
|
||||
Database::standardizeTableNames($tableName);
|
||||
$this->table = new Schema($tableName);
|
||||
$this->schema = new Schema($tableName);
|
||||
}
|
||||
|
||||
public function column(string $name, Type $type, mixed $default = null, bool $isNullable = false, bool $isUnique = false): Table {
|
||||
@@ -29,19 +28,19 @@ class Table
|
||||
$col->isUnique = $isUnique;
|
||||
$col->isNullable = $isNullable;
|
||||
|
||||
$this->table->columns[$name] = $col;
|
||||
$this->schema->cols[$name] = $col;
|
||||
return $this;
|
||||
}
|
||||
|
||||
protected function id(): Table {
|
||||
$id = new Primary;
|
||||
$id->name = $this->table->name . '_id';
|
||||
$this->table->primary = $id;
|
||||
$id->name = $this->schema->name . '_id';
|
||||
$this->schema->id = $id;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function reference(Schema $foreignTable, Propagation $onDelete = Propagation::CASCADE, Propagation $onUpdate = Propagation::CASCADE): Table {
|
||||
$name = $foreignTable->primary->name;
|
||||
$name = $foreignTable->id->name;
|
||||
|
||||
$ref = new Reference;
|
||||
$ref->name = $name;
|
||||
@@ -49,31 +48,31 @@ class Table
|
||||
$ref->onDelete = $onDelete;
|
||||
$ref->onUpdate = $onUpdate;
|
||||
|
||||
$this->table->references[$name] = $ref;
|
||||
$this->schema->refs[$name] = $ref;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function engine(Engine $engine): Table {
|
||||
$this->table->engine = $engine;
|
||||
$this->schema->engine = $engine;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function charset(Charset $charset): Table {
|
||||
$this->table->charset = $charset;
|
||||
$this->schema->charset = $charset;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function collation(Collation $collation): Table {
|
||||
$this->table->collation = $collation;
|
||||
$this->schema->collation = $collation;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function toSql(): string {
|
||||
$primaryKey = $this->table->primary->name;
|
||||
$clause = "CREATE TABLE `{$this->table->name}` (\n";
|
||||
$primaryKey = $this->schema->id->name;
|
||||
$clause = "CREATE TABLE `{$this->schema->name}` (\n";
|
||||
$clause .= " PRIMARY KEY (`$primaryKey`),\n";
|
||||
|
||||
foreach ($this->table->columns as $col) {
|
||||
foreach ($this->schema->cols as $col) {
|
||||
if ($col->name !== $primaryKey) {
|
||||
$clause .= " `$col->name` {$col->type->toString()}";
|
||||
$clause .= !$col->isNullable ? ' NOT NULL' : '';
|
||||
@@ -89,7 +88,7 @@ class Table
|
||||
}
|
||||
|
||||
// Add foreign keys
|
||||
foreach ($this->table->references as $ref) {
|
||||
foreach ($this->schema->refs as $ref) {
|
||||
$clause .= " FOREIGN KEY (`{$ref->name}`)";
|
||||
$clause .= " REFERENCES `{$ref->otherTable->name}` (`{$ref->name}`)";
|
||||
$clause .= " ON DELETE {$ref->onDelete->toString()}";
|
||||
@@ -98,9 +97,9 @@ class Table
|
||||
|
||||
// Close the SQL string and add constraints
|
||||
$clause = rtrim($clause, ",\n") . "\n) ";
|
||||
$clause .= "ENGINE={$this->table->engine->toString()} ";
|
||||
$clause .= "CHARSET={$this->table->charset->toString()} ";
|
||||
$clause .= "COLLATE={$this->table->collation->toString()};";
|
||||
$clause .= "ENGINE={$this->schema->engine->toString()} ";
|
||||
$clause .= "CHARSET={$this->schema->charset->toString()} ";
|
||||
$clause .= "COLLATE={$this->schema->collation->toString()};";
|
||||
return $clause;
|
||||
}
|
||||
|
||||
@@ -108,8 +107,8 @@ class Table
|
||||
global $wpdb;
|
||||
$this->id();
|
||||
|
||||
Database::standardizeTableNames($this->table->name);
|
||||
$tableName = $this->table->name;
|
||||
Database::standardizeTableNames($this->schema->name);
|
||||
$tableName = $this->schema->name;
|
||||
|
||||
$foundTables = $wpdb->get_var("SHOW TABLES LIKE '$tableName'");
|
||||
if (is_null($foundTables)) {
|
||||
@@ -117,6 +116,6 @@ class Table
|
||||
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
||||
dbDelta($sql);
|
||||
}
|
||||
return $this->table;
|
||||
return $this->schema;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user