執行個體詳解Laravel資料庫遷移的方法

來源:互聯網
上載者:User
本文主要介紹Laravel 的資料庫遷移的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望能協助到大家。

產生遷移

--table 和 --create 選項可用來指定資料表的名稱,或是該遷移被執行時會建立的新資料表。這些選項需在預產生遷移檔案時填入指定的資料表:


php artisan make:migration create_users_tablephp artisan make:migration create_users_table --create=usersphp artisan make:migration add_votes_to_users_table --table=users

添加欄位

\database\migrations\2017_07_30_133748_create_users_table.php


<?phpuse Illuminate\Support\Facades\Schema;use Illuminate\Database\Schema\Blueprint;use Illuminate\Database\Migrations\Migration;class CreateUsersTable extends Migration{  /**   * 運行資料庫遷移   *   * @return void   */  public function up()  {    //      Schema::create('users',function (Blueprint $table){        $table->increments('id')->comment('遞增ID');        $table->string('email',60)->comment('會員Email');        $table->string('phone',20)->comment('會員手機號');        $table->string('username',60)->comment('使用者名稱');        $table->string('password',32)->comment('使用者密碼');        $table->char('rank',10)->comment('會員等級');        $table->unsignedSmallInteger('sex')->comment('性別;0保密;1男;2女');        $table->unsignedSmallInteger('status')->comment('使用者狀態');        $table->ipAddress('last_ip')->default('0.0.0.0')->comment('最後一次登入IP');        $table->timeTz('last_login')->comment('最後一次登入時間');        $table->timestamps();      });  }  /**   * 復原資料庫遷移   *   * @return void   */  public function down()  {    //    Schema::drop('users');  }}

要建立一張新的資料表,可以使用 Schema facade 的 create 方法。create 方法接收兩個參數:第一個參數為資料表的名稱,第二個參數為一個 閉包 ,此閉包會接收一個用於定義新資料表的 Blueprint 對象

你可以方便地使用 hasTable 和 hasColumn 方法來檢查資料表或欄位是否存在:


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

如果你想要在一個非預設的資料庫連接中進行資料庫結構操作,可以使用 connection 方法:


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

你可以在資料庫結構構造器上設定 engine 屬性來設定資料表的儲存引擎:


Schema::create('users', function (Blueprint $table) {  $table->engine = 'InnoDB';  $table->increments('id');});

重新命名與刪除資料表


Schema::rename($from, $to);//重新命名//刪除已存在的資料表Schema::drop('users');Schema::dropIfExists('users');

建立欄位


Schema::table('users', function (Blueprint $table) {  $table->string('email');});
命令 描述
$table->bigIncrements('id'); 遞增 ID(主鍵),相當於「UNSIGNED 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->dateTimeTz('created_at'); DATETIME (帶時區) 形態
$table->decimal('amount', 5, 2); 相當於 DECIMAL 型態,並帶有精度與基數。
$table->double('column', 15, 8); 相當於 DOUBLE 型態,總共有 15 位元,在小數點後面有 8 位元。
$table->enum('choices', ['foo', 'bar']); 相當於 ENUM 型態。
$table->float('amount', 8, 2); 相當於 FLOAT 型態,總共有 8 位元,在小數點後面有 2 位元。
$table->increments('id'); 遞增的 ID (主鍵),使用相當於「UNSIGNED INTEGER」的型態。
$table->integer('votes'); 相當於 INTEGER 型態。
$table->ipAddress('visitor'); 相當於 IP 位址形態。
$table->json('options'); 相當於 JSON 型態。
$table->jsonb('options'); 相當於 JSONB 型態。
$table->longText('description'); 相當於 LONGTEXT 型態。
$table->macAddress('device'); 相當於 MAC 位址形態。
$table->mediumIncrements('id'); 遞增 ID (主鍵) ,相當於「UNSIGNED MEDIUM INTEGER」型態。
$table->mediumInteger('numbers'); 相當於 MEDIUMINT 型態。
$table->mediumText('description'); 相當於 MEDIUMTEXT 型態。
$table->morphs('taggable'); 加入整數 taggable_id 與字串 taggable_type。
$table->nullableMorphs('taggable'); 與 morphs() 欄位相同,但允許為NULL。
$table->nullableTimestamps(); 與 timestamps() 相同,但允許為 NULL。
$table->rememberToken(); 加入 remember_token 並使用 VARCHAR(100) NULL。
$table->smallIncrements('id'); 遞增 ID (主鍵) ,相當於「UNSIGNED SMALL INTEGER」型態。
$table->smallInteger('votes'); 相當於 SMALLINT 型態。
$table->softDeletes(); 加入 deleted_at 欄位用於虛刪除操作。
$table->string('email'); 相當於 VARCHAR 型態。
$table->string('name', 100); 相當於 VARCHAR 型態,並帶有長度。
$table->text('description'); 相當於 TEXT 型態。
$table->time('sunrise'); 相當於 TIME 型態。
$table->timeTz('sunrise'); 相當於 TIME (帶時區) 形態。
$table->tinyInteger('numbers'); 相當於 TINYINT 型態。
$table->timestamp('added_on'); 相當於 TIMESTAMP 型態。
$table->timestampTz('added_on'); 相當於 TIMESTAMP (帶時區) 形態。
$table->timestamps(); 加入 created_at 和 updated_at 欄位。
$table->timestampsTz(); 加入 created_at and updated_at (帶時區) 欄位,並允許為NULL。
$table->unsignedBigInteger('votes'); 相當於 Unsigned BIGINT 型態。
$table->unsignedInteger('votes'); 相當於 Unsigned INT 型態。
$table->unsignedMediumInteger('votes'); 相當於 Unsigned MEDIUMINT 型態。
$table->unsignedSmallInteger('votes'); 相當於 Unsigned SMALLINT 型態。
$table->unsignedTinyInteger('votes'); 相當於 Unsigned TINYINT 型態。
$table->uuid('id'); 相當於 UUID 型態。

欄位修飾


Schema::table('users', function (Blueprint $table) {  $table->string('email')->nullable();});
Modifier Description
->after('column') 將此欄位放置在其它欄位「之後」(僅限 MySQL)
->comment('my comment') 增加註釋
->default($value) 為此欄位指定「預設」值
->first() 將此欄位放置在資料表的「首位」(僅限 MySQL)
->nullable() 此欄位允許寫入 NULL 值
->storedAs($expression) 建立一個儲存的產生欄位 (僅限 MySQL)
->unsigned() 設定 integer 欄位為 UNSIGNED
->virtualAs($expression) 建立一個虛擬產生欄位 (僅限 MySQL)

欄位更新


Schema::table('users', function (Blueprint $table) {  $table->string('phone',20)->change();  $table->string('username',60)->->nullable()->change();});

重新命名欄位


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

欄位移除


Schema::table('users', function (Blueprint $table) {  $table->dropColumn(['last_ip', 'last_login']);});

在使用欄位更新,重新命名欄位,欄位移除之前,請務必在你的 composer.json檔案require鍵名中添加< "doctrine/dbal": "^2.5">值。然後composer update進行更新或


composer require doctrine/dbal

建立索引


$table->string('email')->unique();
Command Description
$table->primary('id'); 加入主鍵。
$table->primary(['first', 'last']); 加入複合鍵。
$table->unique('email'); 加入唯一索引。
$table->unique('state', 'my_index_name'); 自訂索引名稱。
$table->unique(['first', 'last']); 加入複合唯一鍵。
$table->index('state'); 加入基本索引。

開啟和關閉外鍵約束


Schema::enableForeignKeyConstraints();Schema::disableForeignKeyConstraints();

運行遷移


php artisan migrate

線上上環境強制執行遷移


php artisan migrate --force

復原遷移

若要復原最後一次遷移,則可以使用 rollback 命令。此命令是對上一次執行的「批量」遷移復原,其中可能包括多個遷移檔案:


php artisan migrate:rollback

在 rollback 命令後加上 step 參數,你可以限制復原遷移的個數。例如,下面的命令將會復原最後的 5 個遷移。


php artisan migrate:rollback --step=5

migrate:reset 命令可以復原應用程式中的所有遷移:


php artisan migrate:reset

使用單個命令來執行復原或遷移

migrate:refresh 命令不僅會復原資料庫的所有遷移還會接著運行 migrate 命令。所以此命令可以有效重新建立整個資料庫:


php artisan migrate:refresh// 重新整理資料庫結構並執行資料填充php artisan migrate:refresh --seed

使用 refresh 命令並加上 step 參數,你也可以限制執行復原和再遷移的個數。比如,下面的命令會復原並再遷移最後的 5 個遷移:


php artisan migrate:refresh --step=5

無法產生遷移檔案

在 Laravel 項目中,由於測試,有時候用 PHP artisan make:migration create_xxx_table 建立資料庫遷移。如果把建立的遷移檔案 database/migrations/2017_07_30_133748_create_xxx_table.php 檔案給刪除了,再次執行 php artisan make:migration create_xxx_table 會報錯:

複製代碼 代碼如下:


[ErrorException]
include(E:\laraver\vendor\composer/../../database/migrations/2017_07_30_133748_create_users_table.php): failed to open stream: No such file or directory

重新運行 composer update 又可以執行上面的命令了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.