laravel 使用 Faker 數據填充

導語

作開發的時候,添加測試數據是必不可少的,laravel 內置了很方便的數據填充,下面是實例。php

數據遷移

  1. 先建立數據模型和數據遷移 php artisan make:model Models/FakerUser -m
  2. 只建立幾個簡單字段,編輯 database/migrations/{now_date}_create_faker_users_table.php 文件
/**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('faker_users', function (Blueprint $table) {
            $table->increments('id');
            $table->char('name', 20)->comment('姓名');
            $table->string('email', 50)->comment('郵箱');
            $table->tinyInteger('age')->comment('年齡');
            $table->char('city', 20)->comment('城市');
            $table->timestamps();
        });

        DB::statement("ALTER TABLE `faker_users` comment'測試用戶表'"); // 表註釋
    }
  1. 運行數據遷移 php artisan migrate 以後數據表建立完成。

數據填充

  1. 建立數據填充文件 php artisan make:seeder FakerUsersSeeder
  2. 建立完成後,咱們能夠在 run() 方法中手動添加幾條測試數據。可是好的辦法,是使用模型工廠,接下來把注意力轉移到模型工廠中;
  3. 建立模型工廠 php artisan make:factory FakerUsersFactory
  4. 在模型工廠中,能夠經過 Faker\Generator 來生成測試數據,編輯 database/factories/FakerUsersFactory.php
<?php

use Faker\Generator as Faker;

$factory->define(\App\Models\FakerUser::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->safeEmail,
        'age' => $faker->numberBetween(8, 80),// 數字在 8-80 之間隨機
        'city' => $faker->city,
        'created_at' => $faker->dateTimeBetween('-3 year', '-1 year'),// 時間在 三年到一年 之間
        'updated_at' => $faker->dateTimeBetween('-1 year', '-5 month'),// 時間在 一年到五個月之間
    ];
});

由上述代碼能夠很直白的看出 Faker\Generator 的做用。它能夠生成的數據類型有不少,更多的類型能夠看下官方文檔,雖然是英文的,不過都有示例,簡單易懂;html

  1. Faker 生成的數據默認是英文,能夠在 config/app.php 中將 faker_locale 設置爲 zh_CN
  2. 模型工廠寫好了,接下來就是調用。目光回到數據填充文件 database/seeds/FakerUsersSeeder.php,在 run() 方法中以下代碼
/**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        factory(\App\Models\FakerUser::class)->times(1000)->make()->each(function ($model) {
            // 數據入庫
            $model->save();
        });
    }

time() 是生成的次數,make() 方法是建立模型實例,在 each() 方法中將生成的模型實例入庫保存。laravel

  1. 最後就是執行數據填充,composer dump-autoload 以後 php artisan db:seed --class=FakerUsersSeeder

測試

好了,看下數據庫的數據是否生成正確。看下總數
查看總數git

總數沒有問題,隨機看十條數據
查看數據github

數據也是正確的。數據庫


參考資料:數據填充Laravel 文檔-數據庫測試Fakerapp

相關文章
相關標籤/搜索