【发布时间】:2020-01-03 05:59:29
【问题描述】:
为什么需要在 Adonis.js 中设置存在于 Migrations(带有引用)和 Models(带有 hasMany)的数据库中的关系?
【问题讨论】:
标签: model-view-controller orm adonis.js
为什么需要在 Adonis.js 中设置存在于 Migrations(带有引用)和 Models(带有 hasMany)的数据库中的关系?
【问题讨论】:
标签: model-view-controller orm adonis.js
总之,迁移和模型是独立的,不能一起工作。要使用模型,不必使用迁移(您可以使用现有数据库)。
迁移用于创建数据库。
您必须在迁移文件中定义数据库的结构。所以关系很重要。
迁移是记录在案的数据库突变,在整个应用程序的开发生命周期中创建,您可以随时回滚或重新运行。
迁移使团队工作变得更容易,使来自一个开发人员的数据库架构更改可以轻松跟踪,然后由您组织中的其他开发人员应用。
当然,没有必要使用迁移。您可以创建自己的数据库并仅使用允许您检索数据的models。
模型 (Lucid) 的有趣之处在于它很容易进行 SQL 查询(使用 Knex)。
由于模型和迁移没有关联,因此有必要声明要使用的表之间的不同关系。
Lucid 是 active record pattern 的 AdonisJS 实现。
关系是数据驱动应用程序的支柱,将一种模型类型链接到另一种模型类型。
例如,一个 User 可以有很多 Post 关系,每个 Post 可以有很多 Comment 关系。
Lucid 富有表现力的 API 使关联和获取模型关系的过程变得简单直观,无需接触 SQL 语句,甚至无需编辑 SQL 模式。
关系:
用户模型:
const Model = use('Model')
class User extends Model {
posts () {
return this.hasMany('App/Models/Post') // has many Post
}
}
module.exports = User
控制器代码:
const User = use('App/Models/User')
const users = await User
.query()
.with('posts') // Use model relationship
.fetch()
输出:
[
{
id: 1,
username: 'virk',
posts: [{
id: 1,
user_id: 1,
post_title: '...',
post_body: '...',
}]
}
]
【讨论】: