我对Laravel的工厂有点困惑。
所有谈论的工厂都是创建虚拟对象的能力,因此您可以测试,或者只是为您的测试快速生成虚拟对象。
您通常使用Faker
帮助程序来获取随机数据。
现在,我有另一个需要工厂的常见用例,它是对象创建。
因此,例如,在TreeController@store
中,我有一个静态方法来创建/更新设置:
$championship->settings = ChampionshipSettings::createOrUpdate($request, $championship);
与
public static function createOrUpdate(Request $request, Championship $championship): ChampionshipSettings
{
$request->request->add(['championship_id' => $championship->id]);
$arrSettings = $request->except('_token', 'numFighters');
$settings = static::where(['championship_id' => $championship->id])->first();
if ($settings == null) {
$settings = new self();
}
$settings->fill($arrSettings);
$settings->save();
return $settings;
}
我想我会使用Factories来管理对象创建,但我不能因为我已经将它们用于虚拟内容。
另外,我可以在我的工厂中使用不同的案例,但它开始增加我认为可以避免的复杂性。
然后,我可以使用现有工厂,但如果我没有指定属性,它将生成一个随机属性,所以我需要在创建之前将所有未使用的属性设置为null ...
好吧,我对如何管理工厂感到困惑......