## 为什么要使用数据填充
在开发阶段,我们常常需要使用假数据对应用进行测试. laravel 提供了factory工厂方法来生成假数据.
使用命令创建数据工厂类.
~~~
php artisan make:factory UserFactory
~~~
上面的命令在database/factories文件夹下创建了一个工厂类.
以下,我们创建了一个文章工厂.define()方法接收两个参数,第一个参数是关联的模型,第二个参数是一个闭包. 然后对响应的字段指定合适的数据类型.
~~~
<?php
use Faker\Generator as Faker;
$factory->define(\App\Post::class, function(Faker $faker){
$user_ids = \App\User::pluck('id')->toArray();
return [
'title' => $faker->sentence,
'content' => $faker->paragraph,
'user_id' => $faker->randomElement($user_ids),
];
});
~~~
## 通过tinker生成数据
然后通过命令进入tinker
~~~
php artisan tinker
~~~
~~~
factory(\App\Post::class,50)->create()
~~~
就可以生成50条假数据了
## 通过seeder生成数据
在命令行输入
~~~
php artisan make:seeder PostTableSeeder
~~~
该命令会在database/sedds文件夹下创建PostTableSeeder类
~~~
<?php
use Illuminate\Database\Seeder;
class PostTableSeeder extends Seeder
{
public function run()
{
factory(\App\Post::class)->times(50)->create(); //times()方法指定生成的数据条数,create()方法用来创建数据.
}
}
~~~
然后在database/seeds/文件夹的DatabaseSeeder类的run()方法中调用$this->call()方法
~~~
<?php
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run()
{
Model::unguard();
$this->call(PostTableSeeder::class);
Model::unguard();
}
}
~~~
完成以上操作后在命令行运行即可生成假数据.
~~~
php artisan db:seed
~~~