如何使用Laravel Eloquent仅检索枢轴行?

时间:2019-10-17 19:03:54

标签: php laravel eloquent pivot relationship

我有三个模型和相对表:

  • 约会(型号:约会)
  • 疗法(模型:疗法)
  • appointment_therapies(无模型)

每次约会都可能有很多疗法(按摩,初诊,跑步等)。

通过搜索表单,我需要检索(例如)在所有约会中完成的所有按摩疗法,也就是说,我需要通过约会表进行循环。

我尝试过:

Appointment::with(['therapies' => function ($sub) use ($request) {
   $sub->where('therapy_id', $request->therapy_id);
}]) ->get();

通过这个查询,我得到所有的约会和所有的治疗方法。

  • 预约1
    • 疗法1
    • 疗法2
  • 预约2
    • 疗法3
    • 疗法4

结果,我无法遍历各种疗法;我希望是这样的:

  • 疗法1
  • 疗法2
  • 疗法3
  • 疗法4

我编辑了“去哪里”,这是更正确的。

1 个答案:

答案 0 :(得分:1)

pluck方法可以返回疗法,并且您还应该急于加载疗法以避免运行重复的查询。

$appointments = Appointment::whereHas('therapies', function ($sub) use ($request) {
   $sub->where('therapy_id', $request->therapy_id);
})->with('therapies')->get();

$therapies = $appointments->pluck('therapy');

therapies变量将是与第一个查询返回的约会相关联的所有疗法的集合。

如果您需要返回的集合仍具有约会信息,请改为根据疗法查询并渴望加载相关约会

Therapy::where('id', $request->therapy_id)->with('appointments');