Laravel 有说服力的关系-一次通过的关系

Laravel 有说服力的关系-一次通过的关系,laravel,eloquent,eloquent-relationship,has-one-through,Laravel,Eloquent,Eloquent Relationship,Has One Through,问题: 我想使用availabilities表中的shift_id从它的表中获取匹配的可用性计划。 可用性已经是用户和班次之间的数据透视表 我原以为在这里建立一个一刀切的关系是一种方式,但我似乎无法让它发挥作用。 我做错了什么 桌子 可用性 -身份证 -用户id -班次号 - 转移 -身份证 -附表1 - ... 时间表 -身份证 - ... 可用性模型 问题 不知何故,当我使用PHP Artisan Tinker时,我得到了id为Availability.id的计划,而不是id为shi

问题: 我想使用availabilities表中的shift_id从它的表中获取匹配的可用性计划。 可用性已经是用户和班次之间的数据透视表

我原以为在这里建立一个一刀切的关系是一种方式,但我似乎无法让它发挥作用。 我做错了什么

桌子

可用性 -身份证 -用户id -班次号 -

转移 -身份证 -附表1 - ...

时间表 -身份证 - ...

可用性模型

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

$availability=App\availability::find131; 美元可用性→日程→收到 照亮\数据库\雄辩\收藏{3111 全部:[], }


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

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

    );
}

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

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

    );
}

在对生成的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();
 }

在对生成的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();
 }

谢谢你的回答。这也不管用。找不到列:1054“字段列表”中的未知列“schedules.shift\u id”SQL:选择shifts.*,schedules.shift\u id作为laravel\u,通过schedules.id=shifts.schedule\u id中的shifts内部连接schedules上的chedules.shift\u id=1331”。今天找到了解决方案:return DB::table'schedules'->join'shifts'、'shifts.schedule\u id'、'='、'schedules.id'->where'shifts.id'、'='、$this->shift\u id->选择'schedules.*,'shifts.schedule\u id'->获取;谢谢你的回答。这也不管用。找不到列:1054“字段列表”中的未知列“schedules.shift\u id”SQL:选择shifts.*,schedules.shift\u id作为laravel\u,通过schedules.id=shifts.schedule\u id中的shifts内部连接schedules上的chedules.shift\u id=1331”。今天找到了解决方案:return DB::table'schedules'->join'shifts'、'shifts.schedule\u id'、'='、'schedules.id'->where'shifts.id'、'='、$this->shift\u id->选择'schedules.*,'shifts.schedule\u id'->获取;我对hasOneThrough也很失望,所以我只使用了belongsTo两次,即$availability->shift->schedule。这将省去构建自定义查询的麻烦。我也对hasOneThrough感到失望,所以我只使用了两次belongsTo,即$availability->shift->schedule。这将省去构建自定义查询的麻烦。