一、factory
在数据填充时,经常会用到factory方法,它使用faker生成数据。factory的第一个参数对应model类,参数2是填充条数,默认为null1
2
3
4
5
6
7
8
9
10
11
12
13/**
* Create a new factory container.
*
* @param \Faker\Generator $faker
* @param string|null $pathToFactories
* @return static
*/
public static function construct(Faker $faker, $pathToFactories = null)
{
$pathToFactories = $pathToFactories ?: database_path('factories');
return (new static($faker))->load($pathToFactories);
}
创建数据以及creat和make区别:
1 | factory('App\User')->create() ; |
可以查看源代码:\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Factory.php
可以看到 create 和make都生成模型实例并返回:区别是:
create创建后直接插入数据库 , 而make不存储只返回。
Create a Model with Relation
有时需求可能是每个用户可能发布有不同(hasMany)的文章,那么这种带有对象关系的模型,可以如下操作:
创建用户,遍历用户,插入post保存即可。1
2
3
4
5factory(App\User::class, 50)->create()->each(function($u) {
$u->posts()->save(factory(App\Post::class)->make());
});
注意: factory(App\User::class) 根据 User模型生成的工厂构造器,也就是对应UserFactory.php中的工厂设置
二、faker
faker可以用来产生假数据用于测试,相关用法参照 https://github.com/fzaninotto/Faker