環境
- Laravel 8.x
概要
- テーブルが多対多の関係の時にbelongsToManyメソッドを使うが、キー名が id 以外の場合どうするのか調べた
結論
- belongsToManyメソッドの第5、第6引数を使用して対応する
具体例
以下のテーブルがあるとする
- users
user_num | name |
---|---|
1 | foo |
2 | bar |
- roles
role_num | name |
---|---|
1 | baz |
2 | qux |
- role_user(中間テーブル)
id | user_number | role_number |
---|---|---|
1 | 1 | 1 |
2 | 1 | 2 |
上記の様な多対多の関係をEloquentのリレーションで実現する↓
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* このユーザーに属する役割
*/
public function roles()
{
return $this->belongsToMany(Role::class, 'role_user', 'user_number', 'role_number', 'user_num', 'role_num', );
}
}
引数まとめ
- 関連するモデルクラスの名前
- リレーションの中間テーブルのテーブル名
- 接続元の中間テーブルの外部キー名
- 接続先の中間テーブルの外部キー名
- 接続元のキー名
- 接続先のキー名
Eloquent:リレーション 8.x Laravelでは第4引数の紹介までだったが、Laravel APIを見ると第7引数まで指定できると分かった。
これからはLaravel APIをちゃんと見よう。。。