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); } }
$composerdump-autoload创建Seeder后,请不要忘记运行,因为它们不会由composer自动加载(除非您通过artisan命令创建了seeder$phpartisanmake:seederName)
现在,您可以通过运行此artisan命令进行播种phpartisandb: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), ]; });
现在创建一个表种子phpartisanmake:seederUsersTableSeeder
并添加这个
public function run() { factory(App\User::class, 100)->create() }
然后将此添加到DatabaseSeeder
public function run() { $this->call(UsersTableSeeder::class); }
这将为该表提供100条记录。