Laravel 使用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);
    }
}

$composer dump-autoload创建Seeder后,请不要忘记运行,因为它们不会由composer自动加载(除非您通过artisan命令创建了seeder $php artisan make:seeder Name)

现在,您可以通过运行此artisan命令进行播种 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条记录。