【问题标题】:Why we have to set the relations of the database at model and migration? Adonis JS为什么我们必须在模型和迁移时设置数据库的关系?阿多尼斯
【发布时间】:2020-01-03 05:59:29
【问题描述】:

为什么需要在 Adonis.js 中设置存在于 Migrations(带有引用)和 Models(带有 hasMany)的数据库中的关系?

【问题讨论】:

    标签: model-view-controller orm adonis.js


    【解决方案1】:

    总之,迁移和模型是独立的,不能一起工作。要使用模型,不必使用迁移(您可以使用现有数据库)。

    迁移

    迁移用于创建数据库。

    您必须在迁移文件中定义数据库的结构。所以关系很重要。

    来自official documentation

    迁移是记录在案的数据库突变,在整个应用程序的开发生命周期中创建,您可以随时回滚或重新运行。

    迁移使团队工作变得更容易,使来自一个开发人员的数据库架构更改可以轻松跟踪,然后由您组织中的其他开发人员应用。

    当然,没有必要使用迁移。您可以创建自己的数据库并仅使用允许您检索数据的models

    Models - Relationships

    模型 (Lucid) 的有趣之处在于它很容易进行 SQL 查询(使用 Knex)。

    由于模型和迁移没有关联,因此有必要声明要使用的表之间的不同关系。

    Lucid 是 active record pattern 的 AdonisJS 实现。

    来自official documentation

    关系是数据驱动应用程序的支柱,将一种模型类型链接到另一种模型类型。

    例如,一个 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: '...',
        }]
      }
    ]
    

    ^Source

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      • 2021-03-19
      • 2017-03-30
      • 1970-01-01
      相关资源
      最近更新 更多