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

如何在Laravel Eloquent中实现多层模型关联查询

实现方案

你可以直接用Laravel的关联查询whereHas一步筛选出符合要求的Participant,这种写法效率最高,也能自动避免重复数据问题:

// 替换为你要指定的Sponsor ID
$targetSponsorId = 1;
// 同时满足两个筛选条件:1. 今日创建 2. 存在属于目标Sponsor的Optin记录
$participants = Participant::createdToday()
    ->whereHas('optins', function ($query) use ($targetSponsorId) {
        $query->where('sponsor_id', $targetSponsorId);
    })
    ->get();

// 遍历发送通知即可,自动去重不会重复发送
foreach ($participants as $participant) {
    // 你的发邮件/通知逻辑,示例:Notification::send($participant, new OptinNotice());
    echo $participant->id . PHP_EOL;
}

如果你确实需要从Sponsor对象出发查询,记得预加载关联避免N+1查询问题,同时手动去重(同一个Participant可能对同一个Sponsor产生多条Optin记录):

// 预加载Optin关联的Participant数据,避免循环内重复查库
$sponsor = Sponsor::with('optins.participant')->find(1);
$participants = collect();

foreach ($sponsor->optins as $optin) {
    // 过滤空关联、非今日创建的用户,同时做去重
    if (
        $optin->participant 
        && $optin->participant->created_at->isToday() 
        && !$participants->contains('id', $optin->participant->id)
    ) {
        $participants->push($optin->participant);
    }
}

// 遍历$participants发送通知即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:57:02