11. Laravel 4 結構生成器 Schema

建立數據庫表

Schema::create('users', function($table)
{
    $table->increments('id');
    $table->string('username', 32);
    $table->string('email', 320);
    $table->string('password', 60);
    $table->timestamps();
});

將建立如下數據庫表:mysql

mysql> describe users;
+------------+------------------+-----+----------------+
| Field      | Type             | Key | Extra          |
+------------+------------------+-----+----------------+
| id         | int(10) unsigned | PRI | auto_increment |
| username   | varchar(32)      |     |                |
| email      | varchar(320)     |     |                |
| password   | varchar(60)      |     |                |
| created_at | timestamp        |     |                |
| updated_at | timestamp        |     |                |
+------------+------------------+-----+----------------+

重命名數據庫表

Schema::rename($from, $to);

刪除數據庫表

Schema::drop('users');
Schema::dropIfExists('users'); // 建議使用這種方式

指定結構操做所使用的數據庫鏈接

Schema::connection('foo')->create('users', function($table)
{
    $table->increments('id'):
});

支持的字段類型

自增加主鍵

$table->increments('id');    // INTEGER 類型
$table->bigIncrements('id'); // BIGINT  類型

整型

$table->integer('votes');      // INTEGER  類型
$table->bigInteger('votes');   // BIGINT   類型
$table->smallInteger('votes'); // SMALLINT 類型
$table->tinyInteger('votes');  // TINYINT  類型

注意: tinyIntegerMySQL SqlServer 支持, Postgres 會將其識別爲 smallint ,而 SQLite 則是隻有 integer 類型。sql

浮點

$table->float('amount');         // FLOAT 類型
$table->decimal('amount', 5, 2); // 帶精度和小數的 DECIMAL

字符

$table->string('email');     // VARCHAR 類型
$table->string('name', 100); // VARCHAR 類型(帶長度)
$table->text('description'); // TEXT    類型
$table->binary('data');      // BLOB    類型

布爾

$table->boolean('confirmed'); // BOOLEAN 類型

ENUM

$table->enum('choices', array('foo', 'bar')); // ENUM 類型

日期 時間

$table->date('created_at');     // DATE      類型
$table->dateTime('created_at'); // DATETIME  類型
$table->time('sunrise');        // TIME      類型
$table->timestamp('added_on');  // TIMESTAMP 類型

系統輔助

$table->timestamps();  // 添加 created_at 和 updated_at 列 
$table->softDeletes(); // 添加 deleted_at 列用於軟刪除

附加屬性

->nullable();      // 指明該字段容許 NULL 值 
->default($value); // 爲字段聲明一個默認值 
->unsigned();      // 設置 INTEGER 爲無符號

MySQL 特有的

$table->string('email')->after('name');       // 指明字段排序
$table->string('email')->comment('電子郵件'); // 字段註釋(非原生)

注意: 關於字段註釋,請參考 讓 Laravel 4.1 的「數據庫遷移」支持 MySQL 字段註釋數據庫

重命名字段

Schema::table('users', function($table)
{
    $table->renameColumn('from', 'to');
});

注意: 不支持重命名 enum 字段類型。post

刪除字段

從表中刪除一個字段:.net

Schema::table('users', function($table)
{
    $table->dropColumn('votes');
});

從表中刪除多個字段:code

Schema::table('users', function($table)
{
    $table->dropColumn('votes', 'avatar', 'location');
});

檢查存在性

檢查表是否存在

if (Schema::hasTable('users'))
{
    //
}

檢查字段是否存在

if (Schema::hasColumn('users', 'email'))
{
    //
}

添加索引

$table->primary('id');                   // 添加一個主鍵
$table->primary(array('first', 'last')); // 添加組合鍵
$table->unique('email');                 // 添加惟一鍵
$table->index('state');                  // 添加一個索引

支持鏈式調用:blog

$table->string('email')->unique();

刪除索引

$table->dropPrimary('users_id_primary');  // 從 "users" 表中刪除一個 主鍵 
$table->dropUnique('users_email_unique'); // 從 "users" 表中刪除一個 惟一鍵 
$table->dropIndex('geo_state_index');     // 從 "geo"   表中刪除一個 索引

添加外鍵

指定 user_id 字段參照 users 表中的 id 字段:排序

$table->foreign('user_id')->references('id')->on('users');
$table->foreign('user_id')->references('id')->on('users')
      ->onDelete('cascade');
$table->foreign('user_id')->references('id')->on('users')
      ->onUpdate('cascade');

注意: 當建立一個參照遞增整數類型的外鍵的時候,記得把外鍵字段的類型定義爲無符號。索引

刪除外鍵

$table->dropForeign('posts_user_id_foreign');

設置存儲引擎

Schema::create('users', function($table)
{
    $table->engine = 'InnoDB';
    $table->string('email');
});

附:MySQL 的存儲引擎

  • MyISAM
  • InnoDB
  • IBMDM2I
  • MERGE
  • MEMORY
  • EXAMPLE
  • FEDERATED
  • ARCHIVE
  • CSV
  • BLACKHOLE
相關文章
相關標籤/搜索