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
我需要你在 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