欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > Laravel框架數據庫遷移操作實例詳解

Laravel框架數據庫遷移操作實例詳解

熱門標簽:南京3D地圖標注 邢臺400電話辦理 辦理400電話哪家好點 重慶外呼電銷系統多少錢 濟源百應電銷機器人聯系方式 咸陽電銷 嘟嘟云外呼系統 正規電銷機器人系統 南寧電話外呼系統線路

很多人可能在學習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框架中數據庫遷移操作的方法實例,更多關于Laravel框架的使用技巧請查看下面的相關鏈接

您可能感興趣的文章:
  • Laravel源碼解析之路由的使用和示例詳解
  • 通過源碼解析Laravel的依賴注入
  • 源碼分析 Laravel 重復執行同一個隊列任務的原因
  • Laravel 框架控制器 Controller原理與用法實例分析
  • Laravel 框架路由原理與路由訪問實例分析
  • 4種Windows系統下Laravel框架的開發環境安裝及部署方法詳解
  • Laravel框架下的Contracts契約詳解
  • laravel框架路由分組,中間件,命名空間,子域名,路由前綴實例分析
  • laravel框架使用FormRequest進行表單驗證,驗證異常返回JSON操作示例
  • Laravel框架源碼解析之反射的使用詳解

標簽:隴南 唐山 平頂山 黃山 武漢 河南 通遼 南通

巨人網絡通訊聲明:本文標題《Laravel框架數據庫遷移操作實例詳解》,本文關鍵詞  Laravel,框架,數據庫,遷移,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Laravel框架數據庫遷移操作實例詳解》相關的同類信息!
  • 本頁收集關于Laravel框架數據庫遷移操作實例詳解的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    少妇真人直播免费视频| 日韩一二三区不卡| 欧美一级日韩免费不卡| 亚洲日本va午夜在线影院| 国产一区二区伦理片| 日韩 中文字幕| 欧美日韩国产在线观看| 中文字幕乱码日本亚洲一区二区| 日韩电影在线看| japan高清日本乱xxxxx| 2017亚洲天堂| 久久久久久久免费视频了| 免费久久99精品国产| 久久性爱视频网站| 欧美亚洲综合另类| 亚洲男人天堂一区| 成人av动漫在线| 综合五月激情网| 久久久精品黄色| 久久国产夜色精品鲁鲁99| 在线天堂www在线国语对白| 欧美日韩一区在线观看| 亚洲精品老司机| 成人网男人的天堂| 99成人在线观看| 中文字幕av一区二区三区免费看| 国内精品伊人久久久久av影院| 中文字幕无码人妻少妇免费| 欧美日韩三级一区| 午夜精品久久久久久久久久久| 黄色在线免费播放| 日韩一区二区三区精品视频| 亚洲mv在线观看| 国产草草浮力影院| 日韩一区二区影院| 另类小说一区二区三区| 人妻aⅴ无码一区二区三区| 精品卡一卡二卡三卡四在线| 久久精品国产免费看久久精品| av电影在线不卡| 国产女同互慰高潮91漫画| 成人黄色在线网站| 日本大香伊一区二区三区| 一个色妞综合视频在线观看| 国产国语老龄妇女a片| 欧美二区在线观看| 日韩av电影免费观看高清完整版| 蜜桃传媒一区二区亚洲av| 91精品国产91久久久久久最新毛片 | 91香蕉视频黄| 欧美唯美清纯偷拍| 亚洲h在线观看| 性猛交ⅹxxx富婆video | aaaaa一级片| 国产亚洲一区二区在线观看| 成人综合激情网| 欧美午夜精品一区二区三区| 午夜久久久久久| 久久久久久久久久久久| 久久影音资源网| 成人黄页在线观看| 欧美视频完全免费看| 日韩高清在线一区| 2017亚洲天堂| 亚洲另类春色校园小说| 午夜av免费看| 国产欧美日韩视频在线观看| 91欧美激情一区二区三区成人| 欧美一区二区三区的| 激情六月婷婷久久| 日本国产一区二区| 青青草一区二区三区| 久久久久久久麻豆| 亚洲h动漫在线| 国内精品卡一卡二卡三| 亚洲视频一区二区在线| 国产熟女高潮一区二区三区| www成人在线观看| 91一区二区在线| 精品播放一区二区| 久久aaaa片一区二区| 日韩一级片在线播放| 成人丝袜18视频在线观看| 欧美日本国产视频| 国产精品自拍三区| 色狠狠综合天天综合综合| 日韩精品1区2区3区| 国产探花在线播放| 免费在线观看一区| 在线中文字幕不卡| 国内不卡的二区三区中文字幕| 在线观看网站黄不卡| 激情综合色播五月| 欧美三级在线播放| 国产精品18久久久久久久久 | 亚洲国产wwwccc36天堂| www中文在线| 午夜精品福利一区二区三区av| 特黄一区二区三区| 久久精品国产77777蜜臀| 在线成人免费观看| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 欧美激情在线看| 波多野结衣办公室33分钟| 亚洲国产一区二区a毛片| 婷婷色中文字幕| 国产成都精品91一区二区三| 精品久久久久久无| 国产激情视频网站| 午夜精品在线看| 欧美日韩国产不卡| 天天爽夜夜爽视频| 亚洲人吸女人奶水| 国产这里有精品| 成人深夜福利app| 国产精品欧美一区喷水| 国产又粗又长免费视频| 久久精品国产99国产| 精品国产伦一区二区三区观看方式 | 日韩三级视频在线观看| 久久久久久久人妻无码中文字幕爆| 亚洲欧洲综合另类| 天天看片中文字幕| 成人免费视频免费观看| 国产精品伦一区| 午夜爽爽爽男女免费观看| 国产精品一区二区久久精品爱涩| 久久一日本道色综合| 亚洲AV无码成人精品区明星换面| 另类小说综合欧美亚洲| 2023国产精华国产精品| 亚洲精品国产91| 国产一区二区三区国产| 国产色婷婷亚洲99精品小说| 欧美自拍偷拍网| 丰满白嫩尤物一区二区| 亚洲欧美综合另类在线卡通| 色偷偷成人一区二区三区91| a美女胸又www黄视频久久| 亚洲色图视频网站| 欧美日免费三级在线| 中文字幕天堂av| 日韩精品色哟哟| 欧美精品一区男女天堂| 日本女人性生活视频| 成人综合婷婷国产精品久久| 日韩毛片一二三区| 欧美日韩免费不卡视频一区二区三区| 日本人dh亚洲人ⅹxx| 五月天久久比比资源色| 精品国产一区二区亚洲人成毛片| 性猛交娇小69hd| 成人激情综合网站| 亚洲高清在线精品| 日韩欧美一区二区视频| 人妻少妇无码精品视频区| 国产激情视频一区二区在线观看| 国产精品色婷婷久久58| 91福利精品视频| 小毛片在线观看| 国产麻豆精品久久一二三| 亚洲欧美一区二区在线观看| 欧美性猛片aaaaaaa做受| 中国av免费看| 国产一区二区精品久久| 亚洲人成影院在线观看| 91麻豆精品国产91久久久久久 | 香蕉视频污视频| 精品一区二区三区免费| 国产精品电影院| 欧美福利视频一区| 欧美 日韩 成人| 91视频免费观看| 麻豆成人91精品二区三区| 中文天堂在线一区| 欧美精品在线观看播放| 日本一级免费视频| 99精品国产热久久91蜜凸| 日日夜夜精品视频天天综合网| 久久久美女毛片| 欧美日韩一区成人| 日韩人妻无码精品综合区| a亚洲天堂av| 久久电影国产免费久久电影| 成人欧美一区二区三区白人| 在线播放日韩导航| 神马午夜精品91| 波多野结衣福利| 99久久夜色精品国产网站| 久久精品国内一区二区三区| 亚洲婷婷在线视频| 精品日韩99亚洲| 欧美在线免费观看视频| 2019男人天堂| 95视频在线观看| 成人国产精品免费观看视频| 日韩av一级片| 亚洲日本在线视频观看| 久久天天做天天爱综合色| 欧美日韩国产系列|