我想每次使用现有的Laravel(5.7)工厂生成相同的数据。我看到Faker确实可以设置种子-$faker->seed(123);
,但是必须将其添加到每个工厂。
我一直在寻找一种方法来做,但是没有成功。 $faker
是在Factory类的构造函数中设置的,我想我可以对其进行扩展,然后将种子方法添加到$faker
中。问题是此类在helpers.php (line 495)
中使用,该类是供应商文件,无法修改。是否有办法覆盖Laravel中的那些辅助函数?也许有一种更简单的方法,我没有看到。
答案 0 :(得分:1)
\Illuminate\Database\Eloquent\Factory
类具有一个额外的静态构造函数,该构造函数允许您传入自己的faker实例,然后照常加载现有工厂。您可以按以下方式使用它:
$faker = \Faker\Factory::create();
$faker->seed(1234);
$factory = \Illuminate\Database\Eloquent\Factory::construct($faker);
// Then use the factory as follows
$user = $factory->of(\App\User::class)->create();
如果您需要在整个测试库中的多个位置使用种子工厂,则建议使用setUp()
方法将其绑定到容器。
答案 1 :(得分:0)
只有当您发现自己始终会得到一些重复的结果时,Faker才需要播种。如果没有,我认为甚至不需要设置种子本身