如何借助Eloquent关联合并分类与项目表,返回含对应项目的分类数组?
解决方案
直接利用Eloquent的预加载能力结合集合转换,就能轻松实现需求,同时避免N+1查询问题:
实现代码
use App\Models\Category; function getCategoriesWithItems() { return Category::with('items') ->get() ->map(fn($category) => [ 'category_id' => $category->id, 'category_name' => $category->name, // 按需选择:仅返回项目id和名称,或完整项目数据 'items' => $category->items->pluck('name', 'id')->toArray() // 若需完整项目对象数组,替换为:$category->items->toArray() ]) ->toArray(); }
关键说明
with('items'):预加载所有分类的关联项目,一次性拉取数据,避免循环查询数据库。- 无关联项目的分类(比如示例中的
bikes),$category->items会是一个空集合,转换后自动得到空数组,完全符合需求。
输出示例
调用函数后返回的数组结构如下:
[ [ 'category_id' => 1, 'category_name' => 'cars', 'items' => [ 1 => 'volks', 2 => 'bmw' ] ], [ 'category_id' => 2, 'category_name' => 'bikes', 'items' => [] ] ]
内容的提问来源于stack exchange,提问作者ken mutesh
相关产品推荐
相关产品推荐

