entity-relationship - 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 个联系人?
我希望我的解释清楚,并提前感谢您的帮助!
解决方案
我的一个朋友使用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()
另请参阅此帖子以获取更多信息:链接
推荐阅读
- vba - VBA 中的毕达哥拉斯公式 - 指数和幂
- php - 使用 PHP 从文本文件列表中删除多个文件及其名称变体
- php - 从 php popen 压缩和从命令行不同的结果
- java - png 二进制文件的 base64 编码不起作用 JDK 11.0.3+7 Eclipse 4.11.0
- javascript - 如何在javascript中按顺序分配对象值
- google-authentication - 在 Microsoft Teams 选项卡中嵌入谷歌应用程序出现名为“拒绝连接”的错误
- r - 错误地将 Excel 列显示为向量
- java - POST数据与retrofit2,承载令牌未经授权的android
- python - 是否可以减少使用 GetOldTweets3 所花费的时间
- mysql - 具有多个确切短语和排除项的全文搜索