You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中使用whereHas与find函数查询异常问题求助

问题分析与解决方案

你的代码问题出在这几点:

  • find($eventId)会直接返回单个Event模型实例,后续链式调用的whereHas只是用来验证该Event是否存在active=1的EventInfo关联,但不会过滤关联的EventInfo数据。所以当你访问这个Event的EventInfo关联时,依然会取出所有相关记录,不管active值是0还是1。
  • whereHas的作用是筛选「拥有符合条件关联模型」的主模型,而非过滤关联模型本身的数据集。

正确写法

如果你想获取指定eventId的Event实例,同时只加载其关联中active=1的EventInfo数据,应该用with()方法来约束关联加载:

use Illuminate\Database\Eloquent\Builder;

$event = Event::with(['EventInfo' => function (Builder $query) {
    $query->where('active', 1);
}])->find($eventId);

这样处理后,$event->EventInfo只会返回active字段为1的关联记录。

如果你的需求是筛选出所有拥有至少一条active=1的EventInfo的Event实例(而非单个指定ID),可以结合whereHas和with:

$events = Event::with(['EventInfo' => function (Builder $query) {
    $query->where('active', 1);
}])->whereHas('EventInfo', function (Builder $query) {
    $query->where('active', 1);
})->get();

内容的提问来源于stack exchange,提问作者HuA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 04:52:03