【问题标题】:Laravel HasManyThrough is not working with EagerLoadingLaravel HasManyThrough 不适用于急切加载
【发布时间】: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


【解决方案1】:

经过一番挖掘,我们意识到在 Id 上设置了一个访问器

public function getIdAttribute($value)
{
    return str_pad($value, 5, '0', STR_PAD_LEFT);
}

而这对于远距离关系的所有 eagerLoading 都失败了(hasOne 以某种方式工作)

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 2014-08-13
    • 2021-04-23
    • 2018-10-15
    相关资源
    最近更新 更多