【发布时间】:2021-10-08 15:07:37
【问题描述】:
我正在尝试使用以下模型预先加载 HasManyThrough 关系
手术
- 身份证
手术用户
- 身份证
- surgery_id
- user_id
用户
- 身份证
在Surgery 模型中我有这种关系
public function users()
{
return $this->hasManyThrough(
User::class,
SurgeryUser::class,
'surgery_id',
'id',
'id',
'user_id'
);
}
那我尝试一个简单的测试
$testWithEagerLoading = Surgery::with('users')->get();
$testWithoutEagerLoading = Surgery::get();
dd(
$testWithEagerLoading[0]->users,
$testWithoutEagerLoading[0]->users
);
但我得到了这个
没有 eagerLoading 一切都很好(除了我向数据库发出了很多请求)
但是在使用 eagerLoading (->with()) 时,关系为空。
所以 eagerLoading 似乎打破了一切。还是我错过了什么?
【问题讨论】:
-
我认为你必须使用多对多关系
-
同意^您上面的数据结构看起来像多对多,而不是多对多。有很多通过会像。用户、医生、手术和医生通过手术有很多用户。因为你只是有多个手术用户。
标签: laravel has-many-through eager-loading