是否可以使用 Lucid 在 AdonisJs 中执行嵌套查询构建器?
Is it possible to do a nested query builder in AdonisJs with Lucid?
我想知道是否可以在 AdonisJs 中使用 Lucid 进行嵌套的“.scope”查询?我想获得所有在给定办公室的 OrderItems 中没有 'd' 状态的订单(Laravel 为此使用 whereHas('orders.items'))。
一个例子:
const office = yield Office
.query()
.with('orders.items')
.where('id', officeId)
.scope('orders.items', (builder) => {
builder.whereNot('status','d')
})
.first()
但这只会过滤掉所有具有 'd' 状态的 OrderItems,因此我仍然得到一个列表,其中包含具有空 Item 数组的订单:
office: {
orders: [{
items: [{
status: 'p'
}, {
status: 'c'
}]
},{
items: []
},{
items: []
}]]
}
我想得到这个结果:
office: {
orders: [{
items: [{
status: 'p'
}, {
status: 'c'
}]
}]]
}
您可以执行嵌套查询,但它们不会过滤顶级行。简而言之,Lucid 不支持 whereHas
。
return 结果是一个 lodash 集合,因此您可以通过删除空数组来过滤结果。我建议在 Github.
上创建一个相同的问题
更新
已添加对 same 的支持。查看此线程 https://github.com/adonisjs/adonis-lucid/issues/92
我想知道是否可以在 AdonisJs 中使用 Lucid 进行嵌套的“.scope”查询?我想获得所有在给定办公室的 OrderItems 中没有 'd' 状态的订单(Laravel 为此使用 whereHas('orders.items'))。
一个例子:
const office = yield Office
.query()
.with('orders.items')
.where('id', officeId)
.scope('orders.items', (builder) => {
builder.whereNot('status','d')
})
.first()
但这只会过滤掉所有具有 'd' 状态的 OrderItems,因此我仍然得到一个列表,其中包含具有空 Item 数组的订单:
office: {
orders: [{
items: [{
status: 'p'
}, {
status: 'c'
}]
},{
items: []
},{
items: []
}]]
}
我想得到这个结果:
office: {
orders: [{
items: [{
status: 'p'
}, {
status: 'c'
}]
}]]
}
您可以执行嵌套查询,但它们不会过滤顶级行。简而言之,Lucid 不支持 whereHas
。
return 结果是一个 lodash 集合,因此您可以通过删除空数组来过滤结果。我建议在 Github.
上创建一个相同的问题更新
已添加对 same 的支持。查看此线程 https://github.com/adonisjs/adonis-lucid/issues/92