示例#1
0
 public function buildColumnSql(SchemaInterface $schema, ColumnDeclare $column)
 {
     $name = $column->name;
     $isa = $column->isa ?: 'str';
     if (!$column->type && $isa == 'str') {
         $column->type = 'text';
     }
     $args = new ArgumentArray();
     $sql = $column->buildDefinitionSql($this->driver, $args);
     /**
     BUILD COLUMN REFERENCE
     
     track(
     	FOREIGN KEY(trackartist) REFERENCES artist(artistid)
         artist_id INTEGER REFERENCES artist
     )
     
     MySQL Syntax:
     
         reference_definition:
     
         REFERENCES tbl_name (index_col_name,...)
             [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
             [ON DELETE reference_option]
             [ON UPDATE reference_option]
     
         reference_option:
             RESTRICT | CASCADE | SET NULL | NO ACTION
     
     A reference example:
     
     PRIMARY KEY (`idEmployee`) ,
     CONSTRAINT `fkEmployee_Addresses`
     FOREIGN KEY `fkEmployee_Addresses` (`idAddresses`)
     REFERENCES `schema`.`Addresses` (`idAddresses`)
     ON DELETE NO ACTION
     ON UPDATE NO ACTION
     */
     foreach ($schema->relations as $rel) {
         switch ($rel['type']) {
             case Relationship::BELONGS_TO:
             case Relationship::HAS_MANY:
             case Relationship::HAS_ONE:
                 if ($name != 'id' && $rel['self_column'] == $name) {
                     $fSchema = new $rel['foreign_schema']();
                     $fColumn = $rel['foreign_column'];
                     $fc = $fSchema->columns[$fColumn];
                     $sql .= ' REFERENCES ' . $fSchema->getTable() . '(' . $fColumn . ')';
                 }
                 break;
         }
     }
     return $sql;
 }
示例#2
0
 public function buildColumnSql(SchemaInterface $schema, ColumnDeclare $column)
 {
     $name = $column->name;
     $isa = $column->isa ?: 'str';
     if (!$column->type && $isa == 'str') {
         $column->type = 'text';
     }
     $args = new ArgumentArray();
     $sql = $column->buildDefinitionSql($this->driver, $args);
     return $sql;
 }
示例#3
0
 public function buildColumnSql(SchemaInterface $schema, ColumnDeclare $column)
 {
     $name = $column->name;
     $isa = $column->isa ?: 'str';
     $type = $column->type;
     if (!$type && $isa == 'str') {
         $type = 'text';
     }
     $args = new ArgumentArray();
     $sql = $column->buildDefinitionSql($this->driver, $args);
     /**
      * build sqlite reference
      *    create table track(
      *        trackartist INTEGER,
      *        FOREIGN KEY(trackartist) REFERENCES artist(artistid)
      *    )
      * @see http://www.sqlite.org/foreignkeys.html
      *
      * CREATE TABLE album(
      *     albumartist TEXT,
      *     albumname TEXT,
      *     albumcover BINARY,
      *     PRIMARY KEY(albumartist, albumname)
      *     );
      *
      * CREATE TABLE song(
      *     songid     INTEGER,
      *     songartist TEXT,
      *     songalbum TEXT,
      *     songname   TEXT,
      *     FOREIGN KEY(songartist, songalbum) REFERENCES album(albumartist, albumname)
      * );
      */
     foreach ($schema->relations as $rel) {
         switch ($rel['type']) {
             case Relationship::BELONGS_TO:
             case Relationship::HAS_MANY:
             case Relationship::HAS_ONE:
                 if ($name != 'id' && $rel['self_column'] == $name) {
                     $fSchema = new $rel['foreign_schema']();
                     $fColumn = $rel['foreign_column'];
                     $sql .= ' REFERENCES ' . $fSchema->getTable() . '(' . $fColumn . ')';
                 }
                 break;
         }
     }
     return $sql;
 }
示例#4
0
 public function insertAutoIdColumn()
 {
     $column = new ColumnDeclare('id');
     $column->isa('int')->integer()->notNull()->primary()->autoIncrement();
     $this->primaryKey = 'id';
     $this->columns['id'] = $column;
     array_unshift($this->columnNames, 'id');
 }