繁体   English   中英

如何使用 Laravel Eloquent 仅检索 pivot 行?

[英]How to retrieve ONLY pivot rows with Laravel Eloquent?

我有三个模型和相关表:

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

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

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

我试过了:

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

我已经编辑了 whereHas to with,这更正确。

pluck 方法可以返回治疗,您还应该预先加载治疗以避免运行重复查询。

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

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

治疗变量将是附加到第一个查询返回的约会的所有治疗的集合。

如果您需要返回的集合仍然具有预约信息,请将您的查询改为基于治疗并急切加载相关预约

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM