📜  andonis 多对多分离 - TypeScript (1)

📅  最后修改于: 2023-12-03 15:13:19.574000             🧑  作者: Mango

Andonis 多对多分离 - TypeScript

AndonisJS 是一种现代的 Node.js MVC 框架,它使用 TypeScript 编写,提供了强大的 ORM 功能,包括多对多分离。

什么是多对多分离?

多对多分离是指将在两个表之间发生的关系分离到第三个表中,以确保关系的整洁性和一致性。在 AndonisJS 中,这可以通过使用 lucid ORM 插件来实现。

如何在 AndonisJS 中实现多对多分离?

在 AndonisJS 中,您可以通过创建一个中间表来实现多对多分离。该中间表将包含两个表的 ID,并充当两个表之间的链接。

以下是在 AndonisJS 中实现多对多关系的步骤:

  1. 创建中间表

在 AndonisJS 中,您可以使用 migration 创建新的表。使用以下命令创建一个名为 book_genre 的新表:

class BookGenreSchema extends Schema {
  up () {
    this.create('book_genre', (table) => {
      table.increments('id')
      table.integer('book_id').unsigned().references('id').inTable('books')
      table.integer('genre_id').unsigned().references('id').inTable('genres')
      table.timestamps()
    })
  }

  down () {
    this.drop('book_genre')
  }
}
  1. 定义模型关系

在 AndonisJS 中,您可以使用 Lucid ORM 插件来定义模型和模型之间的关系。在本例中,我们将创建 BookGenreBookGenre 模型,并定义它们之间的关系。

class Book extends LucidModel {
  @column()
  public id: number

  @column()
  public title: string

  @manyToMany(() => Genre)
  public genres: ManyToMany<typeof Genre>
}

class Genre extends LucidModel {
  @column()
  public id: number

  @column()
  public name: string

  @manyToMany(() => Book)
  public books: ManyToMany<typeof Book>
}

class BookGenre extends LucidModel {
  public static table = 'book_genre'
}

在上面的示例中,我们使用 @manyToMany 装饰器定义了在 BookGenre 之间的多对多关系,并指定了中间表模型 BookGenre

  1. 建立和使用多对多关系

现在,我们已经创建了中间表模型和定义了多对多模型关系,可以使用这个新的模型关系来查询特定图书或体裁的所有类型列表。例如:

const book = await Book.query().where('id', 1).preload('genres').firstOrFail()
console.log(book.genres)

const genre = await Genre.query().where('id', 1).preload('books').firstOrFail()
console.log(genre.books)

上述代码中,我们使用 preload 方法预加载了 genresbooks,并输出了结果。

结论

AndonisJS 是一个出色的 Node.js MVC 框架,提供了强大的 ORM 功能,并支持多对多分离。使用本文中提供的步骤和示例,您可以轻松地在 AndonisJS 中实现多对多关系。