AdonisJS 是一个基于 Node.js 的强大框架,用于构建高性能的 Web 应用程序。在 AdonisJS 中,你可以使用 where
查询构造器来过滤数据,并结合 with
方法来加载关联数据。如果你想要仅返回 with
方法的结果,可以使用 whereHas
方法来先过滤关联数据,然后再加载它们。
以下是一个示例,假设我们有一个 User
模型和一个 Post
模型,它们之间是一对多的关系:
// User.js
const Model = use('Model')
class User extends Model {
posts () {
return this.hasMany('App/Models/Post')
}
}
module.exports = User
// Post.js
const Model = use('Model')
class Post extends Model {
user () {
return this.belongsTo('App/Models/User')
}
}
module.exports = Post
现在,假设我们想要获取所有有帖子的用户,并且只返回这些用户的帖子。我们可以这样做:
const User = use('App/Models/User')
const usersWithPosts = await User
.with('posts')
.whereHas('posts', (builder) => {
builder.where('title', 'like', '%example%')
})
.fetch()
在这个例子中,whereHas
方法用于过滤出至少有一个帖子标题包含 "example" 的用户。然后,with
方法加载这些用户的帖子。
whereHas
允许你在加载关联数据之前对其进行过滤,这样可以减少不必要的数据加载,提高查询效率。如果你在使用 whereHas
时遇到问题,比如没有返回预期的结果,可能是因为以下原因:
以下是一个完整的示例,展示了如何在 AdonisJS 中使用 whereHas
和 with
方法:
const User = use('App/Models/User')
const usersWithPosts = await User
.with('posts')
.whereHas('posts', (builder) => {
builder.where('title', 'like', '%example%')
})
.fetch()
console.log(usersWithPosts)
通过这种方式,你可以有效地过滤和加载关联数据,从而提高应用程序的性能和响应速度。
领取专属 10元无门槛券
手把手带您无忧上云