亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Laravel框架數據庫怎么遷移

發布時間:2021-03-11 16:24:23 來源:億速云 閱讀:133 作者:TREX 欄目:開發技術

這篇文章主要介紹“Laravel框架數據庫怎么遷移”,在日常操作中,相信很多人在Laravel框架數據庫怎么遷移問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Laravel框架數據庫怎么遷移”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Laravel 是什么

Laravel 是一套簡潔、優雅的PHP Web開發框架。它可以讓你從面條一樣雜亂的代碼中解脫出來;它可以幫你構建一個完美的網絡APP,而且每行代碼都可以簡潔、富于表達力。

很多人可能在學習Laravel框架的時候,對Laravel的數據庫遷移(以下簡稱Migrations)存在著疑惑:

1. 什么是 Migrations?

2. 為什么要用 Migrations?

3. Migrations 到底方便在哪里?

好了,抱著這些問題,我們今天就一起來學習Migrations。

什么是 Migrations?

我們先來看一下Laravel官方文檔怎么寫的:

Migrations are like version control for your database, allowing your team to easily modify and share the application's database schema. Migrations are typically paired with Laravel's schema builder to easily build your application's database schema. If you have ever had to tell a teammate to manually add a column to their local database schema, you've faced the problem that database migrations solve.

簡單概括起來,就是我們可以將Migrations看作一種數據庫的VCS(Version Control System),即版本控制系統。

可以通過Laravel的artisan命令快速創建、修改或還原數據庫結構。

為什么要用 Migrations?

使用Migrations可以有效地對數據庫進行版本控制,并且遵從了Single Responsibility Principle(單一職責原則),更加方便數據庫的操控。

舉個例子來說,假設我們已經設計并創建好了數據庫,數據已經填充進數據庫了,現在我們發現需要在其中一張表里增加一個名為name的欄目(column),需要在另一張表中將author欄目的名字改為user,那么我現在進入數據庫里,進行了操作。剛剛操作完,公司老板突然找我面談。面談完了之后,我忘記了將我在數據庫里的操作記錄下來或者告知給其他開發人員,那么隨之而來的很可能是災難性的結果。

如果我們使用了Migrations,并且只通過Migrations進行數據庫的操作,那么所有開發人員都可以看到數據庫進行了哪些操作,而不會發生上述的情況。

Migrations 到底方便在哪里?

除了上述提到的版本控制功能外,我們幾乎不需要寫SQL代碼就能簡單快速地組建起數據庫結構,并且可以迅速遷移(migrate)或者回滾(Rollback),省去了大量人工操作的繁瑣。

講解完了概念,我們現在來看一下具體怎么使用Migrations。

要創建一個遷移文件,我們可以用以下artisan命令:

$ php artisan make:migration create_samples_table --create=samples

注意php artisan命令需要在項目根目錄下運行。--create==samples這個選項表明我們想要建立一個名為samples的數據庫表,所以artisan會自動在database\migrations目錄下建立一個叫2017_03_13_061422_create_samples_table.php的文件(其中前綴是創建該文件的日期和時間,用于區分遷移文件的時間先后順序),并且會自動填充好Schema::create這個方法,方便我們創建更多的column:

<?php        
  
use Illuminate\Support\Facades\Schema;        
use Illuminate\Database\Schema\Blueprint;        
use Illuminate\Database\Migrations\Migration;        
  
class CreateSamplesTable extends Migration        
{        
  /**        
   * Run the migrations.        
   *        
   * @return void        
   */        
  public function up()        
  {        
    Schema::create('samples', function (Blueprint $table) {        
      $table->increments('id');        
      $table->timestamps();        
    });        
  }        
  
  /**        
   * Reverse the migrations.        
   *        
   * @return void        
   */        
  public function down()        
  {        
    Schema::dropIfExists('samples');        
  }        
}

我們看到,這個類中有up和down兩個方法。up中我們需要添加創建數據表的函數,以及添加各個欄目的名稱及屬性。而down方法中我們需要添加在回滾該遷移文件時應該有什么樣的結果(這里我們直接刪除這張表)。

可以看出,up和down中的操作是對應的,在up中進行了什么操作,down中就需要撤銷這些操作。

現在我們詳細來看一下up方法。我們看到,Schema::create這個方法是用來創建我們數據表的,在方法中,我們看到Laravel已經為我們填充了幾個columns。

$table->increments('id')將創建一個名為id的column,并賦予PRIMARY KEY、UNSIGNED及AUTO INCREMENT屬性。

$table->timestamps()將創建created_at和updated_at兩個column(類型是DATETIME)。

注意:Laravel默認認為每個table都會存在一個id欄目,并且要求每個table都要有created_at和updated_at這兩個欄目。

現在,我們要在samples表里增加一個名為name的VARCHAR類型的欄目,該怎么做呢?

很簡單,只需要加上這行:

$table->string('name');

如果我們想限制VARCHAR的長度,可以在第二個參數中進行注明:

$table->string('name', 100);

好了,我們暫時就只需要這些欄目。現在我們已經有了遷移文件了,怎么樣才能在數據庫里建立起我們的表呢?

很簡單,輸入

$ php artisan migrate

等待命令完成就可以了。

現在我們在數據庫里,就能看到我們的samples表了。

注意:運行php artisan migrate之前請檢查你的.env文件中DB_DATABASE,DB_USERNAME,DB_PASSWORD 幾項配置是否正確。如果你在Homestead下進行Laravel開發,那么DB_USERNAME默認為homestead,DB_PASSWORD默認為secret,DB_DATABASE請根據你的項目具體填入你的數據庫名稱。

現在問題來了,我們突然想在samples表里,添加一個名為url的欄目,該怎么做呢?我們分情況討論。

1. 我們處于本地開發階段,數據使用種子(Seed)文件進行填充。

對于本地開發,如果想省事,可以直接在samples表的遷移文件中,添加上我們需要的欄目:

$table->string('url', 200)->nullable();

然后我們重置數據庫并做種:

$ php artisan migrate:refresh --seed

這樣就完成了。打開samples表,我們會發現新的欄目已經被創建。

注意,php artisan migrate:refresh命令相當于

$ php artisan migrate:reset       

$ php artisan migrate

所以我們經常會使用到。

2. 另一種情況,我們需要詳細記錄每一個數據庫操作,例如在production環境下進行數據庫修改。

首先我們需要添加一個package:

$ composer require doctrine/dbal

要進行表的修改必須添加以上包裹。

完成后我們需要創建一個新的遷移文件:

$ php artisan make:migration add_url_field_to_samples_table --table=samples

我們想要添加一個url欄目,并且讓它在name之后,我們在Schema::table函數中填入以下代碼:

<?php      
  
use Illuminate\Support\Facades\Schema;      
use Illuminate\Database\Schema\Blueprint;      
use Illuminate\Database\Migrations\Migration;      
  
class ModifySamplesTable extends Migration      
{      
  /**      
   * Run the migrations.      
   *      
   * @return void      
   */      
  public function up()      
  {      
    Schema::table('samples', function (Blueprint $table) {      
      $table->string('url', 200)->after('name');   
    });      
  }      
  
  /**      
   * Reverse the migrations.      
   *      
   * @return void      
   */      
  public function down()      
  {      
    Schema::table('samples', function (Blueprint $table) {      
      $table->dropColumn('url');     
    });      
  }      
}

完成后,我們運行migrate:

$ php artisan migrate

這樣,url就被添加進了sample表中,并且位置處于name之后。

我們在samples表中插入了新的url欄目,那么現在如果我們想把name這個欄目長度限制從100修改為50,該怎么做呢?

同理,我們需要先創建一個migration:

$ php artisan make:migration modify_name_column_in_samples_table --table=samples

在migration文件中,我們添加以下代碼:

<?php      
  
use Illuminate\Support\Facades\Schema;      
use Illuminate\Database\Schema\Blueprint;      
use Illuminate\Database\Migrations\Migration;      
  
class ModifyNameColumnInSamplesTable extends Migration      
{      
  /**      
   * Run the migrations.      
   *      
   * @return void      
   */      
  public function up()      
  {      
    Schema::table('samples', function (Blueprint $table) {      
      $table->string('name', 50)->change();       
    });      
  }      
  
  /**      
   * Reverse the migrations.      
   *      
   * @return void      
   */      
  public function down()      
  {      
    Schema::table('samples', function (Blueprint $table) {      
      $table->string('name', 100)->change();      
    });      
  }      
}

完成后,我們再次運行migrate:

$ php artisan migrate

這樣一來就完成了欄目的修改,非常的直觀。

注意:如果我們想把某個欄目改成其他類型,可以采用以下語法

$table->text('name')->change();

完成之后,再次運行php artisan migrate,我們就可以看到name已經從VARCHAR變為了TEXT類型了。

到此,關于“Laravel框架數據庫怎么遷移”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

磴口县| 陈巴尔虎旗| 灵宝市| 定陶县| 墨脱县| 友谊县| 郁南县| 随州市| 石首市| 湄潭县| 务川| 简阳市| 内黄县| 罗定市| 揭西县| 安顺市| 洞头县| 玛多县| 栖霞市| 喜德县| 襄垣县| 衡南县| 台东县| 鄄城县| 安多县| 阿图什市| 永福县| 察雅县| 汉阴县| 喀喇| 龙胜| 岢岚县| 阳曲县| 扎赉特旗| 潞城市| 珲春市| 宁津县| 蚌埠市| 容城县| 龙门县| 浮梁县|