Laravel 數據庫遷移與數據填充

參考:https://www.jianshu.com/p/4ad6c9239aa8

  1. 什麼是數據庫遷移?
    數據庫遷移就像是數據庫的版本控制,可以讓團隊輕鬆修改並共享應用程序的數據庫結構,避免不斷修改複製數據庫表結構的麻煩。
    遷移文件將會被放置在 database/migrations 目錄下。一個migration文件包含兩部分:up可爲數據添加新的數據表字段或索引,down則是用於執行回滾操作。
  2. 創建遷移文件
    php artisan make:migration create_users_table --create=users
    注意:create_users_table 爲遷移文件的文件名; --create 指定遷移被執行時會創建的新數據表名,該表名爲 users
  3. 執行遷移
    php artisan migrate 運行所有未運行過的遷移,也就是將數據庫不存在的遷移放入數據庫。生成的數據表默認字符集爲 utf8mb4,排序規則 utf8mb4_unicode_ci
  4. 回滾操作
    php artisan migrate:rollback(對上一次執行的[批量]遷移回滾,其中可能包含多個遷移文件)
    php artisan migrate:rollback --step=3(回滾上一次執行的最後3個遷移)
    php artisan migrate:reset(回滾應用程序中的所有遷移)
  5. 添加或者修改已經遷移的表字段
    a. 創建遷移文件:php artisan make:migration change_user_table --table=users(–table 可用來指定數據表的名稱)
    b. 編輯up方法:
    Schema::table('users', function (Blueprint $table) {
        if (!Schema::hasColumn('users','deleted_at')) {
           $table->softDeletes();//添加軟刪除功能,會在users表中添加deleted_at字段
        }
    });
    
    c. 執行遷移:php artisan migrate(執行完會發現數據已經有deleted_at字段)
  6. 數據填充
    我們可以使用 laravel 框架的seeder類來執行數據填充,所有由框架生成的 seeders 都將被放置在 database/seeds 目錄下
    (1)使用
    創建填充文件:php artisan make:seeder UsersTableSeeder
    a. 填充單條數據
    在 run 方法下,填充數據
    \Illuminate\Support\Facades\DB::table('users')->insert([ 'name' => str_random(10), 'email' => str_random(10).'@gmail.com', 'password'=> bcrypt('123'), ]);
    執行:在 DatabaseSeeder 下的 run 方法裏,使用call方法執行額外的填充類($this->call(UserTableSeeder::class);)
    將數據插入數據庫:php artisan db:seed
    b. 批量填充數據:模型工廠
    在database/factories下重命名ModelFactory爲UserFactory.php
    修改UserTableSeeder下的run方法:factory(App\User::class,50)->create();(造出來50條數據)
    執行:在 DatabaseSeeder 下的 run 方法裏,使用call方法執行額外的填充類
    將數據插入數據庫:php artisan db:seed
  7. 可能報錯
    (1)刪除users的遷移文件再次創建時報錯include(D:…\vendor\composer/…/…/database/migrations/2014_10_12_000000_create_users_table.php): failed to open stream: No such file or directory
    原因:php artisan make:migration create_users_table創建數據庫遷移文件後,會在autoload_static.php和autoload_classmap.php這兩個文件中添加遷移文件的緩存,所以再次執行創建數據庫遷移文件命令時,會報上面的錯誤。
    解決:執行composer dump-autoload更新這兩個文件 或者 運行composer update 或者 刪除vendor/composer/autoload_classmap.php和autoload_static.php裏面的create_users_table
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章