Laravel Migrate檔中操作DB (Shcema Builder)

Home / 未分類 / Laravel Migrate檔中操作DB (Shcema Builder)

Laravel 的 Schema 類別提供一個”不可知資料庫”方法去操作表格,在所有 Laravel 支援的資料庫系統都可以運作的很好,並且有一個統一的 API對應所有系統。

Creating & Dropping Tables

使用 Schema::create()方法新增一個表格。

傳入 create()方法的第一個變數是表格的名稱,第二個參數為閉包函式,該函式會接受一個 Blueprint 物件,該物件會被用來定義新表格。

rename()方法可以更改已經存在的表格的名稱:

使用 Schema::connection()方法指定 schema 操作要在哪個連結上:

您可以使用Schema::drop()方法去刪除(drop )一個表格:

Adding Columns

使用Schema::table()方法去更新某個已經存在的表格:

表格建立器包含了許多可以在建立表格時使用的欄位種類:

指令 功能描述
$table->bigIncrements('id'); ID 自動增量,使用相當於「big integer」型態
$table->bigInteger('votes'); 相當於 BIGINT 型態
$table->binary('data'); 相當於 BLOB 型態
$table->boolean('confirmed'); 相當於 BOOLEAN 型態
$table->char('name', 4); 相當於 CHAR 型態
$table->date('created_at'); 相當於 DATE 型態
$table->dateTime('created_at'); 相當於 DATETIME 型態
$table->decimal('amount', 5, 2); 相當於 DECIMAL 型態,並帶有精度與尺度
$table->double('column', 15, 8); 相當於 DOUBLE 型態
$table->enum('choices', array('foo', 'bar')); 相當於 ENUM 型態
$table->float('amount'); 相當於 FLOAT 型態
$table->increments('id'); 相當於 Incrementing 型態(資料表主鍵)
$table->integer('votes'); 相當於 INTEGER 型態
$table->longText('description'); 相當於 LONGTEXT 型態
$table->mediumInteger('numbers'); 相當於 MEDIUMINT 型態
$table->mediumText('description'); 相當於 MEDIUMTEXT 型態
$table->morphs('taggable'); 加入整數taggable_id 與字串taggable_type
$table->nullableTimestamps(); timestamps() 相同,但允許 NULL
$table->smallInteger('votes'); 相當於 SMALLINT 型態
$table->tinyInteger('numbers'); 相當於 TINYINT 型態
$table->softDeletes(); 加入 deleted_at 欄位於軟刪除使用
$table->string('email'); 相當於 VARCHAR 型態 equivalent column
$table->string('name', 100); 相當於 VARCHAR 型態,並指定長度
$table->text('description'); 相當於 TEXT 型態
$table->time('sunrise'); 相當於 TIME 型態
$table->timestamp('added_on'); 相當於 TIMESTAMP 型態
$table->timestamps(); 加入 created_atupdated_at 欄位
$table->rememberToken(); 加入remember_token 使用 VARCHAR(100) NULL
->nullable() 標示此欄位允許 NULL
->default($value) 宣告此欄位的預設值
->unsigned() 設定整數是無分正負

如果您使用的是MySQL資料庫,您可以使用 after()方法去指定欄位順序:

MySQL系統使用After()方法

Renaming Columns

在 Schema Builder 使用 renameColumn()重新命名欄位。在命名欄位之前,先確認有將 doctrine/dbal 相依加在 composer.json。

重新命名欄位

注意: enum 種類的欄位無法不支援更名。

Dropping Columns

刪除資料表格中的某一個欄位

刪除資料表超過一個以上的欄位

Checking Existence

您可以很簡單得使用 hasTable() 和 hasColumn()去檢查表格或是欄位是否存在:

檢查表格是否存在
檢查欄位是否存在

Adding Indexes

Schema產生器支援許多種類的索引。有兩種方法可以去新增索引。首先,您可以在定義欄位時定義,或是您可以分別新增它們:

新增欄位時加入索引

或是您可以選擇在其他行加入索引。以下是所有可用的索引種類:

$table->primary(‘id’); Adding a primary key
$table->primary(array(‘first’, ‘last’)); Adding composite keys
$table->unique(’email’); Adding a unique index
$table->index(‘state’); Adding a basic index

Foreign Keys

Laravel 同時也提供表格的外鍵限制支援:

在表格加入外鍵

在這個例子中,我們規定 user_id 欄位參照 users 表格的 id 欄位。

您也可以指定限制器中 “on delete” 和 “on update” 動作的選項:

您可以使用 dropForeign()方法刪除外鍵。刪除索引的方法和刪除外鍵的方法的命名轉換即為類似。

注意: 當新增一個外鍵,此外鍵參照的是累加的數字,請記住將外鍵欄位 unsigned (關於 unsigned請參考此文)

Dropping Indexes

您必須指定一個索引名稱才能刪除索引。Laravel 預設會指定一個合理的名稱給索引。簡單的將表格名稱,索引欄位以及索引種類連接。以下為一些例子:

$table->dropPrimary(‘users_id_primary’); Dropping a primary key from the “users” table
$table->dropUnique(‘users_email_unique’); Dropping a unique index from the “users” table
$table->dropIndex(‘geo_state_index’); Dropping a basic index from the “geo” table

Storage Engines

在 Schema Builder 藉由設置 engine屬性設定表格的儲存引擎:

參考資料

Laravel-Schema: http://laravel.com/docs/schema

無用洪:http://jocoomadao.logdown.com/posts/190017-laravel-schema-builder

1182 全部 1 今日

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

*