在全球为Laravel的工厂设置Faker的种子

时间:2019-02-27 12:14:04

标签: php laravel factory faker

我想每次使用现有的Laravel(5.7)工厂生成相同的数据。我看到Faker确实可以设置种子-$faker->seed(123);,但是必须将其添加到每个工厂。
我一直在寻找一种方法来做,但是没有成功。 $faker是在Factory类的构造函数中设置的,我想我可以对其进行扩展,然后将种子方法添加到$faker中。问题是此类在helpers.php (line 495)中使用,该类是供应商文件,无法修改。是否有办法覆盖Laravel中的那些辅助函数?也许有一种更简单的方法,我没有看到。

2 个答案:

答案 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才需要播种。如果没有,我认为甚至不需要设置种子本身