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

如何在Laravel中通过Eloquent的with子句筛选同城市用户的Call数据?

实现同城市用户关联Call数据的筛选方案

核心思路

要获取与当前认证用户同城市的用户所关联的Call数据,关键是通过Call与User的关联关系,筛选出所属用户城市匹配当前用户的Call,同时预加载关联的用户信息避免N+1查询。

方法一:使用whereHas过滤关联模型

直接在Call查询中,通过whereHas筛选出所属用户城市符合条件的记录:

$currentUser = auth()->user();

// 仅保留所属用户与当前用户同城市的Call,并预加载用户信息
$calls = Call::with('user')
    ->whereHas('user', function ($query) use ($currentUser) {
        $query->where('city', $currentUser->city);
    })
    ->get();
  • with('user'):预加载关联的用户数据,避免后续查询用户时产生N+1问题
  • whereHas('user'):过滤出存在符合条件关联用户的Call,这里的条件是用户城市等于当前认证用户的城市

方法二:通过子查询筛选用户ID

如果需要复用同城市用户的ID列表,可以用子查询先获取同城市用户ID,再匹配Call的user_id:

$currentUser = auth()->user();

$calls = Call::with('user')
    ->whereIn('user_id', function ($query) use ($currentUser) {
        $query->select('id')
            ->from('users')
            ->where('city', $currentUser->city);
    })
    ->get();

这种方式适合需要多次使用同城市用户ID集合的场景,逻辑更直观。

注意事项

  • 确保User模型存在city字段,Call模型的user_id外键与User表的id正确关联
  • 若需处理未登录场景,可先通过auth()->check()判断用户是否已认证,避免auth()->user()返回null引发错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:50:29