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

Laravel Eloquent如何按重复ID数组获取多条重复记录?

解决Laravel中whereIn返回重复ID对应多条记录的问题

数据库的WHERE IN语法本身会自动去重,所以不管你的ID数组里重复多少次,只会返回每个ID对应的唯一记录。下面提供两种不用手动循环的解决方案:

方案一:通过UNION ALL在数据库层面返回重复记录

利用UNION ALL不会合并重复结果的特性,为每个ID生成单独的查询语句并拼接:

$articleIds = [5, 5, 5];

// 构造UNION ALL查询语句
$subQueries = collect($articleIds)->map(function ($id) {
    return DB::raw("SELECT * FROM articles WHERE id = ?", [$id]);
})->implode(' UNION ALL ');

// 执行查询并转换为Eloquent模型实例
$articles = Article::hydrate(DB::select($subQueries));

这种方式会让数据库返回与原ID数组长度一致的记录,每个重复ID对应一条结果。

方案二:集合映射(仅一次数据库查询,性能更优)

先查询所有唯一ID的记录,再通过集合映射生成包含重复项的结果:

$articleIds = [5, 5, 5];

// 获取所有唯一ID的文章,按ID分组
$articleMap = Article::whereIn('id', array_unique($articleIds))->get()->keyBy('id');

// 根据原ID数组映射出重复的记录集合
$articles = collect($articleIds)->map(fn($id) => $articleMap[$id]);

这个方法只需要一次数据库查询,后续在内存中通过集合处理重复项,性能比方案一更高效,同时也符合你不想用循环的需求。

内容的提问来源于stack exchange,提问作者always-a-learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:06:02