Adonis-Js:获取特定数量的实体与另一个实体的关系

Adonis-Js : Get a specifc number of Entities in relationship with another Entity

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

我有两个实体:

我想请求获取 Contactgroup 的列表,里面有一些 Contact,这里是一个例子,这段代码给我所有 Contactgroup 以及所有与他们相关的 Contact。 :

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

在我的例子中,我只想获得所有 Contactgroup,只有一些 Contact 与之相关(例如最多 3 Contact 找到每个 Contactgroup),但是当我使用下面的代码时:

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

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

if Contactgroup[0] 有 X Contact -> 它显示前 3 个 contact 其中,和 如果 Contactgroup[1] 有 X Contact -> 它会显示一个空数组。

如何为每个 Contactgroup 获取 3 个 contact

希望我的解释清楚,并在此先感谢您的帮助!

我的一个朋友给了我使用 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()

另请参阅此 post 了解更多信息:Link