当在Adonis v5中使用模型关联时,可能会出现“missing model attribute”问题,这是因为相关的属性在模型中未定义。
例如,我们有一个用户模型和一个帖子模型,帖子属于用户。使用belongsTo和hasMany关系,则可以这样定义:
// 定义用户模型 class User extends BaseModel { posts() { return this.hasMany('App/Models/Post') } }
//定义帖子模型 class Post extends BaseModel { user() { return this.belongsTo('App/Models/User') } }
然后,在控制器中,我们可以像这样使用模型关联:
const user = await User.find(1) const posts = await user.posts().fetch()
在这种情况下,如果我们忘记在帖子模型中定义“user_id”属性,则会出现“missing model attribute”问题,因为Adonis无法根据模型关联找到此属性。
因此,为避免这种错误,请确保在使用模型关联之前定义所有相关属性。
//在Post模型中定义user_id属性 class Post extends BaseModel { user() { return this.belongsTo('App/Models/User') }
static get hidden() {
return ['created_by_id', 'updated_by_id', 'deleted_at', 'deleted_by_id']
}
}
不要忘记在模型中定义属性hidden时需要隐藏的属性,以避免暴露敏感信息。