首页 > 解决方案 > Adonis-Js:获取与另一个实体相关的特定数量的实体

问题描述

我需要您在 Adonis-Js 中的帮助来加载具有关系的实体。这是我的问题:

我有两个实体:

我想请求获取包含一些联系人的联系人组列表一个示例,此代码为我提供了所有联系人组以及与之相关的所有联系人。:

    let ContactgroupList = await Contactgroup.query()
        .where('profile_id', auth.user.id)
        .with('contact')
        .fetch();

就我而言,我只想获取所有联系人组,其中只有一些与之相关的联系人(例如,找到的每个联系人组最多有 3 个联系人),但是当我使用下面的代码时:

    let ContactgroupList = await Contactgroup.query()
        .where('profile_id', auth.user.id)
        .with('contact', (builder) => {
          builder.pick(3)
        })
        .fetch();

我只得到与第一个Contactgroup相关的前 3 个联系人,例如:

如果Contactgroup[0]有 X联系人-> 它显示它的前 3 个联系人的数组,如果Contactgroup[1]有 X联系人-> 它将显示一个空数组。

如何为每个Contactgroup获得 3 个联系人

我希望我的解释清楚,并提前感谢您的帮助!

标签: entity-relationshipquery-builderadonis.jslucid

解决方案


我的一个朋友使用eagerLoadQuery给了我解决方案:

let ContactgroupList = await Contactgroup.query()
  .where('profile_id', auth.user.id)
  .with('contact', (builder) => {
    builder.eagerLoadQuery((relationQuery, foriegnKey, groups) => {
      relationQuery
        .from('contacts as c')
        .whereRaw('(select count(*) from `contacts` as c1 where c.contactgroup_id = c1.contactgroup_id AND c.id < c1.id) < 3')
        .whereIn(`c.${foriegnKey}`, groups)
        .orderBy('c.id', 'desc')
    })
  })
  .fetch()

另请参阅此帖子以获取更多信息:链接


推荐阅读