Exemple #1
0
 /**
  * {@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);
 }