前言
這是一篇基礎教程,對標 Laravel 文檔中的數(shù)據(jù)遷移和數(shù)據(jù)填充,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹把。
關于Laravel數(shù)據(jù)庫遷移的理解
最初看到laravel框架中遷移的時候,會以為這個遷移是把數(shù)據(jù)從一個數(shù)據(jù)庫中遷到另一個數(shù)據(jù)庫中,又或者是從一個服務器遷移到另一個服務器中。我自己學習有一個學習方法叫做顧名思義,所以所述是我的第一反應,但是學了以后發(fā)現(xiàn)這個遷移不是我理解中的遷移,但又不知道為什么叫做遷移,所以去百科查了一下。
遷移是指已經(jīng)獲得的知識、技能,甚至方法和態(tài)度對學習新知識、新技能的影響。這種影響可能是積極的,也可能是消極的,前者叫正遷移或簡稱遷移,后者叫負遷移或干擾。遷移首先是使習得的經(jīng)驗得以概括化、系統(tǒng)化,形成一種穩(wěn)定的整合的心理結構,從而更好地調節(jié)人的行為,并能動地作用于客觀世界。遷移是向能力轉化的關鍵。能力的形成一方面依賴于知識、技能的掌握;另一方面也依賴于所掌握知識和技能的不斷概括化、系統(tǒng)化。——引用于360百科
看完上面的百科說明,其實才明白什么叫做數(shù)據(jù)庫遷移,總結一下,遷移是指某種影響,所以數(shù)據(jù)庫遷移是通過對遷移文件的修改對數(shù)據(jù)庫造成的影響,這種影響其實就是操作數(shù)據(jù)庫。
換句通俗的話說,是在laravel中有一個文件,這個文件中寫了laravel本身內置的對數(shù)據(jù)庫的“命令“,例如可以創(chuàng)建修改刪除庫、表、字段。通過這些文件中的代碼,便可以通過版本控制達到控制數(shù)據(jù)庫的目的,至于如何通過文件操作數(shù)據(jù)庫,我們可以看文檔中的具體說明。
migration
Laravel 中提供了數(shù)據(jù)庫遷移的方式來管理數(shù)據(jù)庫,想象一個場景:在一個多人開發(fā)的項目中,你的同事修改了某個數(shù)據(jù)庫結構并修改了代碼,通過 git 你可以即時的同步同事修改的代碼,但是數(shù)據(jù)庫結構,你只能通過手工的方式來復制同事修改的 SQL 語句,執(zhí)行以保證數(shù)據(jù)庫的結構一致。那么,Laravel 中的數(shù)據(jù)庫遷移概念,就是用于解決團隊中保證數(shù)據(jù)庫結構一致的方案。
migration 使用非常簡單,編寫一定的 php 代碼并執(zhí)行,那么 Laravel 就會自動的更新數(shù)據(jù)庫。假設你的同事要修改數(shù)據(jù)庫某個字段,那么只要編寫 php 代碼,接著你通過 git 更新了代碼,執(zhí)行 migrate 操作之后,你的數(shù)據(jù)庫結構就和他的同步了。下面我們就來看具體的使用方法。
migrate
Laravel 把編寫數(shù)據(jù)庫改動的 php 代碼稱為遷移,可以通過 php artisan make:migration filename
的方式來創(chuàng)建遷移文件。假設你需要創(chuàng)建一張新的 user 表,那么你可以通過執(zhí)行 php artisan make:migration create_user_table --create=user
來創(chuàng)建一個遷移文件,執(zhí)行命令會在 database/migrations/ 目錄下建立一個 文件創(chuàng)建時間_filename 的 php 文件,那么這個文件就是我們接下來用來編寫數(shù)據(jù)庫結構變化的文件了。這里要提一點,雖然說創(chuàng)建遷移文件的名稱可以隨意,但是為了管理方便,最好文件名可以體現(xiàn)要執(zhí)行的數(shù)據(jù)庫操作,比如這里我們要創(chuàng)建一張 user 表,所以文件名稱為 create_user_table。
php artisan make:migration filename 有兩個可選參數(shù)
- --create=tablename 表明該遷移是用來創(chuàng)建表。
- --table=tablename 表明該遷移是用來對 tablename 這張表進行操作。
我們創(chuàng)建出來的遷移文件 create_user_table 會包含兩個方法。
public function up() { Schema::create('user', function (Blueprint $table) { $table->increments('id'); $table->timestamps(); }); } public function down() { Schema::dropIfExists('user'); }
這兩個方法是互逆的操作,比如我們可以再 up 方法中編寫我們要創(chuàng)建的 user 表的相關信息,而 down 方法中則是刪除 user 表的操作。這樣,我們就可以做到回滾操作,當我們創(chuàng)建 user 表之后發(fā)現(xiàn)某個字段名寫錯了,就可以通過 down 來刪除 user 表,進而重新建立 user 表。
假設 user 表有 id,username,email 三個字段,那么可以再 up 方法中寫
public function up() { Schema::create('user', function (Blueprint $table) { $table->increments('id')->index()->comment('用戶id'); $table->string('name')->default('')->comment('用戶名'); $table->string('email')->nullable()->comment('用戶郵箱'); $table->timestamps(); }); }