示例#1
0
文件: example2.php 项目: jivoo/data
 public static function getDefinition()
 {
     $def = new DefinitionBuilder();
     $def->addAutoIncrementId();
     // Autoincrementing INT id
     $def->username = DataType::string(255);
     // Username VARCHAR(255)
     $def->password = DataType::string(255);
     // Password VARCHAR(255)
     $def->addtimeStamps();
     // Timestamps: 'created' and 'updated'
     $def->addUnique('username', 'username');
     // A unique index on the username field
     return $def;
 }
示例#2
0
 /**
  * {@inheritdoc}
  */
 public function getDefinition($table)
 {
     $result = $this->db->query('SHOW COLUMNS FROM `' . $this->db->tableName($table) . '`');
     $schema = new DefinitionBuilder();
     while ($row = $result->fetchAssoc()) {
         $column = $row['Field'];
         $schema->{$column} = $this->toDataType($row);
     }
     $result = $this->db->query('SHOW INDEX FROM `' . $this->db->tableName($table) . '`');
     $keys = array();
     while ($row = $result->fetchAssoc()) {
         $key = $row['Key_name'];
         $column = $row['Column_name'];
         $unique = $row['Non_unique'] == 0 ? true : false;
         if (isset($keys[$key])) {
             $keys[$key]['columns'][] = $column;
         } else {
             $keys[$key] = array('columns' => array($column), 'unique' => $unique);
         }
     }
     foreach ($keys as $name => $key) {
         if ($key['unique']) {
             $schema->addUnique($key['columns'], $name);
         } else {
             $schema->addKey($key['columns'], $name);
         }
     }
     return $schema;
 }
示例#3
0
 /**
  * {@inheritdoc}
  */
 public function getDefinition($table)
 {
     $result = $this->db->query('PRAGMA table_info("' . $this->db->tableName($table) . '")');
     $definition = new DefinitionBuilder();
     $primaryKey = array();
     while ($row = $result->fetchAssoc()) {
         $column = $row['name'];
         if (isset($row['pk']) and $row['pk'] == '1') {
             $primaryKey[] = $column;
         }
         $definition->{$column} = $this->toDataType($row);
     }
     $definition->setPrimaryKey($primaryKey);
     $result = $this->db->query('PRAGMA index_list("' . $this->db->tableName($table) . '")');
     while ($row = $result->fetchAssoc()) {
         $key = $row['name'];
         $unique = $row['unique'] == 1;
         $name = preg_replace('/^' . preg_quote($this->db->tableName($table) . '_', '/') . '/', '', $key, 1, $count);
         if ($count == 0) {
             continue;
         }
         $columnResult = $this->db->query('PRAGMA index_info("' . $key . '")');
         $columns = array();
         while ($row = $columnResult->fetchAssoc()) {
             $columns[] = $row['name'];
         }
         if ($unique) {
             $definition->addUnique($columns, $name);
         } else {
             $definition->addKey($columns, $name);
         }
     }
     return $definition;
 }
示例#4
0
 /**
  * {@inheritdoc}
  */
 public function getDefinition($table)
 {
     $result = $this->db->query("SELECT * FROM information_schema.columns WHERE table_name = '" . $this->db->tableName($table) . "'");
     $definition = new DefinitionBuilder();
     while ($row = $result->fetchAssoc()) {
         $column = $row['column_name'];
         $definition->{$column} = $this->toDataType($row);
     }
     $sql = 'SELECT i.relname AS index_name, a.attname AS column_name, indisunique, indisprimary FROM';
     $sql .= ' pg_class t, pg_class i, pg_index ix, pg_attribute a WHERE';
     $sql .= ' t.oid = ix.indrelid AND i.oid = ix.indexrelid AND a.attrelid = t.oid';
     $sql .= " AND a.attnum = ANY(ix.indkey) AND t.relkind = 'r'";
     $sql .= " AND t.relname = '" . $this->db->tableName($table) . "'";
     $result = $this->db->query($sql);
     $keys = array();
     while ($row = $result->fetchAssoc()) {
         $key = $row['index_name'];
         $column = $row['column_name'];
         $unique = $row['indisunique'] != 0;
         if (isset($keys[$key])) {
             $keys[$key]['columns'][] = $column;
         } else {
             $keys[$key] = array('columns' => array($column), 'unique' => $unique);
         }
     }
     foreach ($keys as $name => $key) {
         $name = preg_replace('/^' . preg_quote($this->db->tableName($table) . '_', '/') . '/', '', $name, 1, $count);
         if ($count == 0) {
             continue;
         }
         if ($key['unique']) {
             $definition->addUnique($key['columns'], $name);
         } else {
             $definition->addKey($key['columns'], $name);
         }
     }
     return $definition;
 }