Laravel 8 Eloquent ORM with()方法结合过滤查询返回空结果
问题分析与解决
你遇到的核心问题是:直接在Cita查询链里加->where('id_vete', $idVete)是在Cita主表中查找该字段,但id_vete大概率不在Cita表内——这也是join写法能正常运行(join会关联到存有该字段的表),而Eloquent直接用where返回空的原因。
解决方案
根据id_vete所在的关联表,使用whereHas过滤关联模型的条件:
若id_vete在User表中
Cita::with(['evento', 'user']) ->whereHas('user', function($query) use ($idVete) { $query->where('id_vete', $idVete); }) ->get();
若id_vete在Evento表中
Cita::with(['evento', 'user']) ->whereHas('evento', function($query) use ($idVete) { $query->where('id_vete', $idVete); }) ->get();
额外排查点
- 确认
id_vete字段拼写完全正确,包括数据库是否区分大小写 - 如果关联模型启用了软删除,需要在
whereHas闭包里添加->withTrashed()(若需包含已删除数据)
内容的提问来源于stack exchange,提问作者ezequiel videla
相关产品推荐
相关产品推荐

