在使用migration功能之前,請(qǐng)至少閱讀三遍官方文檔
migration功能雖然表面看上去比較簡(jiǎn)單,但其中要是一不留神,就會(huì)遇到很多很多錯(cuò)誤
功能
快速命令
- 創(chuàng)建模型并生成migration文件
php artisan make:model <model> -m - 快速回滾
php artisan migrate:rollback - 快速填充
php artisan migrate --seed - 快速回滾填充
php artisan migrate:refresh --seed
設(shè)置
- 指定存儲(chǔ)引擎(默認(rèn)MyISAM)
$table->engine = 'InnoDB'; - 指定自增主鍵
$table->increments('id'); - 可空timestamp
$table->nullableTimestamps(); - 軟刪除
$table->softDeletes(); - 字段說(shuō)明
$table->string('code')->comment('編碼'); - 外鍵約束
$table->integer('foreign_id')->nullable()->unsigned()->comment('comment');
$table->foreign('foreign_id')->references('id')->on('foreign_talbe')->onDelete('cascade');
特別注意
1、外鍵問(wèn)題
在添加外鍵的時(shí)候,一定要確保依賴的外鍵表要提前創(chuàng)建。
如果已經(jīng)創(chuàng)建了,則可以通過(guò)修改migration文件名的時(shí)間來(lái)更改migration的生成順序。
2、model factory
model factory用于定義假數(shù)據(jù),具體用法可以參考fzaninotto/faker的用法
- 創(chuàng)建關(guān)聯(lián)外鍵
在model factory文件中,可以使用elequent將數(shù)據(jù)取出來(lái),可以參考以下用法
$sales_orders = NewSalesOrder::select('id', 'code')->get()->toArray();
- 多個(gè)model factory文件
可以將model factories文件分割成單個(gè)文件,即每個(gè)model的factory定義都保存在一個(gè)單獨(dú)的文件下(只需要放在/database/factories下即可),文件名可以命名為<ModelFactory.php>即可
3、seeder
在定義好migration和model factory之后,在seeder里面調(diào)用即可(要注意順序,否則可能外鍵關(guān)聯(lián)會(huì)出現(xiàn)問(wèn)題)
factory(Chemical::class, 10)->create();
4、更改模型名或表名
如果需要更改表名,不推薦直接修改migration定義的文件名,因?yàn)樾枰薷牡牡胤胶芏啵疫€導(dǎo)致migration文件里面的記錄跟migation文件不一致而導(dǎo)致回滾出現(xiàn)問(wèn)題(對(duì)于團(tuán)隊(duì)來(lái)說(shuō)簡(jiǎn)直是災(zāi)難)
推薦使用laravel migration的更改表名的功能
5、要特別關(guān)注migations數(shù)據(jù)表
新手在使用的時(shí)候,或多或少都會(huì)遇到一些問(wèn)題,導(dǎo)致migrations表的記錄和實(shí)際生成的數(shù)據(jù)表不一致
6、推薦一次只創(chuàng)建一個(gè)表
確定沒(méi)問(wèn)題后,再創(chuàng)建新的表。因?yàn)閙igration的錯(cuò)誤提示,有時(shí)候并不是很明確指明問(wèn)題出現(xiàn)在哪里