📅  最后修改于: 2023-12-03 15:13:19.574000             🧑  作者: Mango
AndonisJS 是一种现代的 Node.js MVC 框架,它使用 TypeScript 编写,提供了强大的 ORM 功能,包括多对多分离。
多对多分离是指将在两个表之间发生的关系分离到第三个表中,以确保关系的整洁性和一致性。在 AndonisJS 中,这可以通过使用 lucid ORM 插件来实现。
在 AndonisJS 中,您可以通过创建一个中间表来实现多对多分离。该中间表将包含两个表的 ID,并充当两个表之间的链接。
以下是在 AndonisJS 中实现多对多关系的步骤:
在 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')
}
}
在 AndonisJS 中,您可以使用 Lucid ORM 插件来定义模型和模型之间的关系。在本例中,我们将创建 Book
、Genre
和 BookGenre
模型,并定义它们之间的关系。
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
装饰器定义了在 Book
和 Genre
之间的多对多关系,并指定了中间表模型 BookGenre
。
现在,我们已经创建了中间表模型和定义了多对多模型关系,可以使用这个新的模型关系来查询特定图书或体裁的所有类型列表。例如:
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
方法预加载了 genres
或 books
,并输出了结果。
AndonisJS 是一个出色的 Node.js MVC 框架,提供了强大的 ORM 功能,并支持多对多分离。使用本文中提供的步骤和示例,您可以轻松地在 AndonisJS 中实现多对多关系。