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

Laravel 8 Eloquent链式with关联查询的筛选与排序问题

Laravel 8 Eloquent 关联查询解决方案

直接给你链式内联的实现代码,同时满足两个需求:

// 假设主模型为 Recipe,根据实际业务替换为你的主模型名
$models = Recipe::with([
    // 1. 仅从 cooking_methods 选取特定字段(必须包含关联外键)
    'cooking_methods' => fn($query) => $query->select('id', 'name', 'recipe_id'), // 替换为实际关联外键和需要的字段
    // 2. 按 priority 排序 suppliers 并仅取第一个结果
    'suppliers' => fn($query) => $query->orderBy('priority', 'asc')->limit(1)
])->get();

关键说明:

  • 选取关联模型特定字段时,必须包含关联外键(比如示例中的 recipe_id),否则 Eloquent 无法匹配主模型与关联模型的关系,会导致关联数据加载失败。
  • 对 suppliers 的处理直接在预加载闭包里链式调用 orderBy() 和 limit(1),就能实现排序后仅保留第一条记录,Laravel 完全支持这种内联闭包的链式写法。
  • 如果需要复用 suppliers 的优先排序逻辑,可以在主模型中单独定义关联方法:
    public function primarySupplier()
    {
        return $this->hasOne(Supplier::class)->orderBy('priority', 'asc');
    }
    
    之后预加载时直接使用 with('primarySupplier') 即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:34:58