AdonisJSでピボットテーブルを使用した関連付け


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でピボットテーブルを使用して関連付けを行うことができます。これにより、ユーザーと役割の間の多対多の関係を簡単に表現できます。