使用 faker 和 ModelFactories 生成種子

1)基本的簡單方法

資料庫驅動的應用程式通常需要將預先插入系統的資料用於測試和演示目的。

要製作此類資料,請先建立播種器類

ProductTableSeeder

use Faker\Factory as Faker;
use App\Product;

class ProductTableSeeder extends DatabaseSeeder {

public function run()
{
    $faker = $this->getFaker();

    for ($i = 0; $i < 10; $i++)
    {
        $name =         $faker->word;
        $image =        $faker->imageUrl;
       
        Modelname::create([
            'name' => $name,
            'image' => $image,
        ]);
      }
    }
 }

要呼叫能夠執行播種器類,你可以從 DatabaseSeeder 類中呼叫它,只需傳遞你希望執行的播種器的名稱:

使用 Illuminate \ Database \ Seeder;

class DatabaseSeeder extends Seeder {

    protected $faker;

    public function getFaker() {
        if (empty($this->faker)) {
            $faker = Faker\Factory::create();
            $faker->addProvider(new Faker\Provider\Base($faker));
            $faker->addProvider(new Faker\Provider\Lorem($faker));
        }
        return $this->faker = $faker;
    }
    public function run() {
        $this->call(ProductTableSeeder::class);
    }
}

建立 Seeder 後不要忘記執行 $ composer dump-autoload,因為它們不會被作曲家自動自動載入(除非你通過 artisan 命令建立了播種器 $ php artisan make:seeder Name

現在你準備通過執行這個工匠命令 php artisan db:seed 來播種

2)使用模型工廠

首先,你要為 App/database/factories/ModelFactory.php 中的每個模型定義一組預設屬性

以使用者模型為例,這就是 ModelFactory 的樣子

$factory->define(App\User::class, function (Faker\Generator $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->email,
        'password' => bcrypt(str_random(10)),
        'remember_token' => str_random(10),
    ];
});

現在建立一個表播種器 php artisan make:seeder UsersTableSeeder

並新增這個

public function run()
{
    factory(App\User::class, 100)->create()
}

然後將其新增到 DatabaseSeeder

public function run()
{
    $this->call(UsersTableSeeder::class);
}

這將為該表提供 100 條記錄。