AdonisJSでは、ピボットテーブルを使用して、多対多の関係を表現できます。ピボットテーブルは、2つの異なるテーブルの関連付けを保持するために使用されます。
例を通じて、AdonisJSでピボットテーブルを使用した関連付けを解説します。まず、2つのテーブル「users」と「roles」があるとします。これらのテーブルは、多対多の関係を持っています。それぞれのユーザーは複数の役割を持ち、同じ役割は複数のユーザーに関連付けられています。
まず、AdonisJSのマイグレーション機能を使用して、テーブルを作成します。以下は、マイグレーションファイルの例です。
'use strict'
/ @type {import('@adonisjs/lucid/src/Schema')} */
const Schema = use('Schema')
class CreateUsersTableSchema extends Schema {
up () {
this.create('users', (table) => {
table.increments()
table.string('name', 80).notNullable()
table.timestamps()
})
}
down () {
this.drop('users')
}
}
module.exports = CreateUsersTableSchema
'use strict'
/ @type {import('@adonisjs/lucid/src/Schema')} */
const Schema = use('Schema')
class CreateRolesTableSchema extends Schema {
up () {
this.create('roles', (table) => {
table.increments()
table.string('name', 80).notNullable()
table.timestamps()
})
}
down () {
this.drop('roles')
}
}
module.exports = CreateRolesTableSchema
次に、AdonisJSのモデルを作成します。以下は、ユーザーモデルとロールモデルの例です。
// User.js
'use strict'
/ @type {typeof import('@adonisjs/lucid/src/Lucid/Model')} */
const Model = use('Model')
class User extends Model {
roles() {
return this.belongsToMany('App/Models/Role')
.pivotTable('user_role')
}
}
module.exports = User
// Role.js
'use strict'
/ @type {typeof import('@adonisjs/lucid/src/Lucid/Model')} */
const Model = use('Model')
class Role extends Model {
users() {
return this.belongsToMany('App/Models/User')
.pivotTable('user_role')
}
}
module.exports = Role
以上のモデルによって、ユーザーと役割の関連付けが設定されます。AdonisJSでは、「belongsToMany」メソッドを使用して多対多の関係を定義します。また、関連付けに使用されるピボットテーブルは、「pivotTable」メソッドを使用して指定します。
このようにして、AdonisJSでピボットテーブルを使用して関連付けを行うことができます。これにより、ユーザーと役割の間の多対多の関係を簡単に表現できます。