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



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

我有两个实体:

  • 联系人(属于联系人组(
  • 联系人组(hasMany Contact(

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

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();

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

如果联系人组[0]有X联系->它显示了它的前3个触点的阵列,以及如果联系人组[1]有X联系->它将显示一个空数组。

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

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

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

有关更多信息,请参阅这篇文章:链接

最新更新