为什么 Laravel 不立即保存关系?

Why Laravel does not save relationships immediately?

让我们看一下这个示例代码:

$activity = new Activity(...);
$company->activities()->save($activity);

dd($company->activities);

此代码在控制器方法中。

如果我 运行 此代码一次,我将得到 [] 作为输出。如果我再 运行 一次,我就会得到以前的保存 activity。如果我再 运行 一次,我将获得 2(而不是 3)个活动等

所以似乎 laravel 在调用保存方法时没有正确保存关系。我也尝试过使用 $company->push() 之类的东西,但没有成功。

当您之前加载了 activities 关系(通过预先加载或仅通过访问它)并且它缓存在模型中时,就会发生这种情况。

您可以通过预先调用 load() 来获取更新的集合:

$company->activities()->save($activity);
$company->load('activities');
dd($company->activities);