1、seed的作用
在laravel的中文文檔是這樣寫的:Laravel 包含一個填充類可以為你的資料庫填充測試資料。所有的填充類都放在 database/seeds 目錄下。你可以随意為填充類命名, 但是更建議您遵守類似 UsersTableSeeder 的命名規範。通常, Laravel 預設定義了一個 DatabaseSeeder 類。
是以,seed的作用主要是用來填充資料庫中的資料。在實際開發過程中,我們通常需要加入一些測試資料,或者儲存資料庫中的初始資料,防止在開發過程中遇到的資料丢失,加的話還是挺麻煩的。當然,也可以直接導出資料庫的表結構和表資料。
2、seed的使用
具體詳細的使用可以看參考文檔:laravel5.8中文文檔資料填充,也可以看我寫的一些小demo。
首先,先見一個model類和相應的資料遷移,通過資料遷移檔案來建立資料庫。建立的方式采用artisan指令的形式。具體指令如下:
//建立model類并同時生成遷移檔案
php artisan make:model demo --migration
建立成功可以看到:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL6FERPRTTU10dRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL4kTN2EjMzMTMyEzNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
建立成功後編輯model類和遷移檔案的内容,如果需要把model類檔案放在其他檔案夾下需要修改命名空間。
做的修改如下:
model類:
//指定資料庫中的表,當然,得保障在.env檔案中資料庫的配置無誤,表名和遷移檔案中的表名一直就好
protected $table='demos';
遷移檔案:
Schema::create('demos', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('userName'); //使用者名
$table->string('passWord'); //密碼
$table->timestamps();
});
接下來就可以運作遷移檔案生成資料庫了,artisan指令如下:
//運作所有未執行的遷移
php artisan migrate
這裡可能會有個小問題就是會報錯,[報錯:字元太長]SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was t oo long;這裡可以修改app\Providers\AppServiceProvider.php,在register()方法下加入代碼如下:
Schema::defaultStringLength(191);
成功運作遷移後,資料庫就有表了,如圖:
這時的表中還沒有資料,我們就可以通過seeder類來加入一些測試資料。首先,先建立一個seeder類。artisan指令如下:
php artisan make:seeder DemosTableSeeder
建立seed檔案DemosTableSeeder.php之後,可以在run()方法中為資料庫添加資料。代碼如下:
DB::table('demos')->insert([
'userName' => '測試資料1',
'passWord' => '123',
'created_at' => '2019-07-12 13:56:30',
'updated_at' => '2019-07-12 13:56:30'
]);
使用artisan指令運作:
//--class後接seeder類名
php artisan db:seed --class=DemosTableSeeder
執行之後,就會向資料庫中填充資料,如圖:
在日常開發中,開始時需要的測試資料可能比較多,這裡就需要用到模型工廠了。
首先,先建立一個模型工廠:
//建立model工廠并指定model類
php artisan make:factory DemoFactory --model=demo
$factory->define(demo::class, function (Faker $faker) {
return [
//加入一些随機記錄,密碼加密
'userName' => $faker->userName,
'password' => $faker->md5,
'created_at' => $faker->dateTime,
'updated_at' => $faker->dateTime
];
});
在seeder類中加入以下代碼:
//create()方法不僅建立了factory執行個體,還使用了save()方法将資料儲存到了資料庫中,其中5為插入資料庫中的記錄數量
factory(demo::class,5)->create();
再次運作seed檔案,結果如下圖:
在實際開發中,通常還會用到将已經有的資料庫中資料導出成seeder檔案,具體過程如下:
首先,使用composer下載下傳擴充,指令如下:
composer require orangehill/iseed
下載下傳完成後,在你的 config/app.php 檔案中添加 Service Provider
'providers' => [
...
Orangehill\Iseed\IseedServiceProvider::class,
],
配置完成後就可以使用artisan指令導出資料庫中的資料為seeder檔案,指令如下:
//demo2s為我一個資料庫表的表名
php artisan iseed demo2s
這樣就已經把demo2s表中資料導出來了,結果如下:
其他更多的指令有:
//強制覆寫原seeder檔案中的資料
php artisan iseed 表名 --force
//導出指定資料庫裡的表
php artisan iseed 表名--database=資料庫名