🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
php artisan make:seeder UsersTableSeeder执行这个命令会生成一个Seeder文件,在database\seeds文件夹下面有UserTableSeeder.php文件,编辑它 ~~~ use Illuminate\Database\Seeder; use Illuminate\Database\Eloquent\Model; class UsersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ //在这里写生成测试数据的代码 public function run() { //可以用factory生成,和tinker一样,create直接插入数据库 factory(\App\User::class,20)->create(); //背后其实是调用database/factories/ModelFactory.php中执行那里面的填充数据 } } ~~~ 注意:如果我们运行php artisan db:seed是执行DatabaseSeeder.php这个文件,当然你也可以在那文件里面写 ~~~ use Illuminate\Database\Seeder; use Illuminate\Database\Eloquent\Model; class DatabaseSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { Model::unguard(); //将那个类传进来 $this->call(UsersTableSeeder::class); Model::reguard(); } } ~~~ 接下来我们创建一个模型并同时创建迁移文件php artisan make:model Lesson -m然后编辑database\migrations文件夹下lessons文件 ~~~ public function up() { Schema::create('lessons', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->text('intro'); $table->timestamp('published_at'); $table->timestamps(); }); } ~~~ 生成表php artisan migrate在DatabaseSeeder.php文件中,编辑 ~~~ use Illuminate\Database\Seeder; use Illuminate\Database\Eloquent\Model; class DatabaseSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { Model::unguard(); //将那个类传进来 $this->call(LessionsTableSeeder::class); Model::reguard(); } } ~~~ 然后创建LessionsTableSeeder文件,编辑这个文件 ~~~ public function run() { factory(\App\Lesson::class,50)->create(); } ~~~ 如果这时候我们运行php artisan db:seed会报错.虽然我们有Lession这个model和seeder文件,但是我们没有在ModelFactory.php中为他定义,所以我们编辑它 //把原来框架的复制下来,更改下 ~~~ $factory->define(App\Lesson::class, function (Faker\Generator $faker) { return [ 'title'=>$faker->sentence, 'intro'=>$faker->paragraph, 'published_at'=>$faker->dateTime, ]; }); ~~~ 我们运行php artisan db:seed就可以了 思路:首先我们创建seeder文件,然后在里面写factory来定义执行次数,然后去ModelFactory.php中定义各个字段,然后在DatabaseSeeder.php中载入之前创建的seeder.最后运行php artisan db:seedseeder文件就会被触发. `php artisan db:seed --class=LessonsTableSeeder后面指定那个class就执行那个seeder文件,不指定就运行DatabaseSeeder.php` 不过我偏向于使用tinker来插入测试数据 ![seeder](https://box.kancloud.cn/bc4bb5e8a29941a8bc30185ed6e02373_1134x568.jpg) 在这个文件夹下会生成这个文件,编辑下,可以用db类 再运行执行单个填充文件就可以 ![seeder](https://box.kancloud.cn/2d4861c7fb0d18b67fb9f9b9556aac7e_1308x920.jpg)