【发布时间】:2020-02-14 18:18:53
【问题描述】:
我有三个模型和相关表:
- 约会(型号:约会)
- 疗法(模型:疗法)
- 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
我已经编辑了 whereHas to with,这更正确。
【问题讨论】:
-
"我已经编辑了 whereHas to with,这更正确。" - 真的不是...我删除了我之前的评论,请参阅下面的 cmets,但与您的
with()逻辑,您将收到 x 个Appointment记录,每个Collection正好是 1 或 0 个Therapy记录,但如果是 1,它将是相同的Therapy记录重复对于每个Appointment. -
如果你使用
whereHas(),正如下面的答案所示,你会得到x条Appointment记录,有0或x条Therapy记录,只要Appointment与与$request->therapy_id匹配的Therapy。您可以将whereHas()与with()结合使用,但您希望使用whereHas('therapies', function(){ ... })->with(['therapies'])->get();(即不要在with()子句中添加任何额外的逻辑。 -
重点是 whereHas() 在 where 子句为真时返回所有的治疗,以及那些治疗 ID 不是请求的治疗。相反,我只需要检索具有请求的therapy_id 的疗法。
-
therapies.therapy_id不是唯一的吗?你有 2 列,therapies.id和therapies.therapy_id?我认为您可能需要发布模型和迁移;这里有太多未知数... -
我需要检索有 id、appation_id 和therapy_id 的约会治疗行。
标签: php laravel eloquent pivot relationship