使用 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 条记录。