/** * {@inheritdoc} * * Schema can generate accessors and filters based on field type. */ public function getMutators() { $mutators = parent::getMutators(); //Trying to resolve mutators based on field type foreach ($this->tableSchema->getColumns() as $column) { //Resolved filters $resolved = []; if (!empty($filter = $this->builder->getMutators($column->abstractType()))) { //Mutator associated with type directly $resolved += $filter; } elseif (!empty($filter = $this->builder->getMutators('php:' . $column->phpType()))) { //Mutator associated with php type $resolved += $filter; } //Merging mutators and default mutators foreach ($resolved as $mutator => $filter) { if (!array_key_exists($column->getName(), $mutators[$mutator])) { $mutators[$mutator][$column->getName()] = $filter; } } } foreach ($mutators as $mutator => &$filters) { foreach ($filters as $field => $filter) { //Some mutators may be described using aliases (for shortness) $filters[$field] = $this->builder->mutatorAlias($filter); } unset($filters); } return $mutators; }
/** * Get statement needed to create table. * * @param AbstractTable $table * @return string */ protected function createStatement(AbstractTable $table) { $statement = ["CREATE TABLE {$table->getName(true)} ("]; $innerStatement = []; //Columns foreach ($table->getColumns() as $column) { $innerStatement[] = $column->sqlStatement(); } //Primary key if (!empty($table->getPrimaryKeys())) { $primaryKeys = array_map([$this, 'quote'], $table->getPrimaryKeys()); $innerStatement[] = 'PRIMARY KEY (' . join(', ', $primaryKeys) . ')'; } //Constraints and foreign keys foreach ($table->getForeigns() as $reference) { $innerStatement[] = $reference->sqlStatement(); } $statement[] = " " . join(",\n ", $innerStatement); $statement[] = ')'; return join("\n", $statement); }