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

AdonisJs如何实现嵌套关联预加载invoiceDetails.product

解决方案

AdonisJS的ORM预加载原生支持嵌套关联查询,有两种常用实现方式:

方式1:点语法(和Laravel用法一致,适合无额外查询条件的场景)

直接在preload方法中传入用.拼接的多级关联名即可,修改你的查询代码如下:

const invoice = await Invoice
  .query()
  .preload('invoiceDetails.product') // 嵌套预加载明细关联的商品数据
  .where('id', request.param('id'))
  .firstOrFail()

方式2:回调函数写法(适合需要对子关联添加自定义查询条件的场景)

如果需要给invoiceDetails或者product的查询增加筛选、指定返回字段等逻辑,可以用回调嵌套的写法:

const invoice = await Invoice
  .query()
  .preload('invoiceDetails', (detailQuery) => {
    // 可在这里给发票明细加查询条件,示例:过滤掉已删除的明细
    detailQuery.whereNull('deleted_at')
    // 嵌套预加载商品,也可以给商品加查询条件
    detailQuery.preload('product', (productQuery) => {
      // 示例:只返回商品的id、名称、售价三个字段
      productQuery.select('id', 'name', 'price')
    })
  })
  .where('id', request.param('id'))
  .firstOrFail()

两种方式都能拿到嵌套的product数据,无自定义查询需求时优先用第一种点语法即可,写法更简洁。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:45:00