问题
我想使用schedule
表中的availability
从表中获取shift_id
的匹配availabilities
。
可用性已经是users
和shifts
之间的数据透视表。
我认为hasOneThrough关系是解决问题的方法,但我似乎无法使其正常工作。
我在做什么错了?
表格
可用性
-id
-user_id
-shift_id
-...
班次
-id
-schedule_id
-...
时间表
-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 =应用\可用性:: find(1331);
$ availability→schedule()→get();
照亮\数据库\口才\集合{#3111
全部:[],
}
答案 0 :(得分:0)
我认为您在hasOneThrough上颠倒了您的关系,因此该关系应为:
public function schedule()
{
return $this->hasOneThrough(
'App\Shift',
'App\Schedule',
'shift_id',
'schedule_id',
);
}
答案 1 :(得分:0)
经过大量尝试并检查了生成的sql查询之后,我得出的结论是hasOneThrough不能以这种方式使用。
我改用了一个querybuilder:
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();
}