我有三个模型和相对表:
每次约会都可能有很多疗法(按摩,初诊,跑步等)。
通过搜索表单,我需要检索(例如)在所有约会中完成的所有按摩疗法,也就是说,我需要通过约会表进行循环。
我尝试过:
Appointment::with(['therapies' => function ($sub) use ($request) {
$sub->where('therapy_id', $request->therapy_id);
}]) ->get();
通过这个查询,我得到所有的约会和所有的治疗方法。
结果,我无法遍历各种疗法;我希望是这样的:
我编辑了“去哪里”,这是更正确的。
答案 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');