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

Laravel Eloquent 如何从指定城镇关联场所中提取存在的分类数组

提取指定城镇下所有场所分类数组的实现方案

方案一:基于已有的查询结果提取(适合已经需要用到$town下场所关联数据的场景)

你已经预加载了所有场所及其分类,直接用Laravel集合的操作方法就能快速提取,无需额外查询数据库:

// 提取完整分类对象数组,自动去重
$categoryArray = $town->places
    ->pluck('categories') // 取出所有场所的分类集合
    ->flatten() // 将多层集合拍平为一维分类集合
    ->unique('id') // 按分类ID去重,避免不同场所的重复分类
    ->values() // 重置数组键为连续索引
    ->toArray();

// 如果只需要分类名称组成的一维数组,追加pluck即可
$categoryNames = $town->places
    ->pluck('categories')
    ->flatten()
    ->unique('id')
    ->pluck('name')
    ->toArray();

方案二:独立查询分类(不需要查询场所数据时更高效,内存占用更低)

如果你不需要用到城镇下的场所详情,只是单独要分类数组,可以直接通过关联关系查询,不需要加载所有场所数据:

// 先拿到目标城镇的ID
$townModel = Town::where('identifier', $town)->first();
// 直接查询关联该城镇场所的所有分类
$categoryArray = PlaceCategory::whereHas('places', function ($query) use ($townModel) {
    $query->where('town_id', $townModel->id);
})->get()->toArray();

两种方案按需选择即可,如果你本来就要渲染场所列表,用方案一不需要额外请求数据库;如果只需要分类列表,方案二的查询性能更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:00:04