Eloquent 关系 - hasOneThrough 关系

Eloquent Relationships - hasOneThrough relation

问题
我想使用 availabilities table.[=39= 中的 shift_id 从 table 中获取 schedule 的匹配 availability ] 可用性已经是 usersshifts 之间的支点 table。

我认为 hasOneThrough 关系是到达这里的方式,但我似乎无法让它工作。
我做错了什么?

表格

可用性
- 编号
- user_id
- shift_id
- ...

班次
- 编号
- schedule_id
- ...

时间表
- 编号
- ...

可用性模型

 public function schedule()
{
    return $this->hasOneThrough(
        'App\Schedule',
        'App\Shift',
        'schedule_id',
        'id',
        'shift_id',
        'id'
    );
}

问题 不知何故,当我使用 PHP Artisan Tinker 时,我得到了 ID 为 Availability.id 的时间表,而不是 ID 为 shift.id 的时间表。 由于这个时间表不存在,我得到一个

$availability = App\Availability::find(1331);
$availability→schedule()→get();
Illuminate\Database\Eloquent\Collection {#3111
all: [],
}

我认为你在 hasOneThrough 上颠倒了你的关系,所以关系应该是:

 public function schedule()
{
    return $this->hasOneThrough(
        'App\Shift',
        'App\Schedule',
        'shift_id',
        'schedule_id',

    );
}

经过大量尝试和检查生成的 sql 查询后,我得出的结论是 hasOneThrough 不能以这种方式使用。

我改用查询生成器:

   public function schedule()
 {
     return DB::table('schedules')
         ->join('shifts', 'shifts.schedule_id', '=', 'schedules.id')
         ->where('shifts.id', '=', "$this->shift_id")
         ->select('schedules.*', 'shifts.schedule_id')
         ->get();
 }