我试图创建一个模型,将其保存在数据库中,并将关系数据附加到它。为此,我不想使用数据库工厂,因为数据库工厂对我没有提供的属性使用随机值。
我尝试了以下操作:
$user = User::create([
'first_name' => $args['first_name'],
'last_name' => $args['last_name'],
'email' => $args['email'],
'password' => \Illuminate\Support\Str::random(),
]);
$user->client()->associate($client);
dd($user->client);
这将为客户端返回null
,但当我这样做时:
$user = User::factory()->create([
'first_name' => $args['first_name'],
'last_name' => $args['last_name'],
'email' => $args['email'],
'password' => \Illuminate\Support\Str::random(),
]);
$user->client()->associate($client);
dd($user->client);
确实管用。我可以在Laravel Factory类中看到,它使用store()
方法来设置模型关系中的连接。这可能是为什么工厂生成的一个做实时更新和手动创建一个不?
请让我知道我如何生成一个模型,如工厂,而不使用工厂!
2条答案
按热度按时间mf98qq941#
在示例中没有显示
$client
。但是像文档一样在末尾添加save()
。jhkqcmku2#
简单地说,这里有一些细节
首先,您必须在associate之后添加保存()
Laravel中的任何模型都有很多方法,比如保存、创建、更新、删除等等。
它们中的每一个都依赖于模型中的不同方法,或者依赖于模型之外的不同类,比如DB
每种方法在背景中所起的作用不同。如果你使用观察者设计模式,你会发现其中一些是被观察的,并且可以使用观察者设计模式,而另一些则不能
这就是dd结果中出现在你面前的事件明显不同的原因
明显的差异在于派遣事件
我希望这能帮助你知道差异来自哪里,以避免将来出现此类问题