天天看點

laravel中seed

1、seed的作用

      在laravel的中文文檔是這樣寫的:Laravel 包含一個填充類可以為你的資料庫填充測試資料。所有的填充類都放在 database/seeds 目錄下。你可以随意為填充類命名, 但是更建議您遵守類似 UsersTableSeeder 的命名規範。通常, Laravel 預設定義了一個 DatabaseSeeder 類。

      是以,seed的作用主要是用來填充資料庫中的資料。在實際開發過程中,我們通常需要加入一些測試資料,或者儲存資料庫中的初始資料,防止在開發過程中遇到的資料丢失,加的話還是挺麻煩的。當然,也可以直接導出資料庫的表結構和表資料。

2、seed的使用

      具體詳細的使用可以看參考文檔:laravel5.8中文文檔資料填充,也可以看我寫的一些小demo。

      首先,先見一個model類和相應的資料遷移,通過資料遷移檔案來建立資料庫。建立的方式采用artisan指令的形式。具體指令如下:

//建立model類并同時生成遷移檔案
php artisan make:model demo --migration
           

建立成功可以看到:

laravel中seed

建立成功後編輯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);
           

成功運作遷移後,資料庫就有表了,如圖:

laravel中seed

這時的表中還沒有資料,我們就可以通過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
           

執行之後,就會向資料庫中填充資料,如圖:

laravel中seed

在日常開發中,開始時需要的測試資料可能比較多,這裡就需要用到模型工廠了。

首先,先建立一個模型工廠:

//建立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檔案,結果如下圖:

laravel中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表中資料導出來了,結果如下:

laravel中seed

其他更多的指令有:

//強制覆寫原seeder檔案中的資料
php artisan iseed 表名 --force
//導出指定資料庫裡的表
php artisan iseed 表名--database=資料庫名