Laravelでは二つのテーブルを組み合わせて、簡単に中間テーブルを作ることができます。
どのようにして作るか、実際の手順をステップごとに解説していきます。
今回は、ユーザーテーブルとロール(役割)テーブルを組み合わせて、【ユーザーロールテーブル】を作っていきます。

その際、ユーザーテーブルとロールテーブルの間には、belongsToManyメソッドを使って、リレーションを構築します。
言葉はむずかしいですが、手順自体はわりとシンプルなので、まずは一度つくってみてください。
LaravelでPivotテーブルを簡単に作る方法【belongsToMany】
次の6ステップで操作を解説していきます。
- ユーザーモデルにロールモデルへのリレーション追加
- ロールモデルとロールテーブル作成
- ロールモデルにユーザーモデルへのリレーション追加
- ロールテーブルのマイグレーションファイル編集
- ユーザー×ロールテーブル作成
- テスト
(バージョンはLaravel8を使って説明していきます。)
①ユーザーモデルとテーブル作成
ユーザーモデルはデフォルトで準備されています。
App\Models\Userとのリレーションを加えます。
public function roles(){
return $this->belongsToMany('\App\Models\Role');
}
Pivotテーブルにタイムスタンプをいれる
なお、デフォルトでは自動的にタイムスタンプ(created_at、updated_atへの値) がはいりません。
->withTimestamps(); を付けておくと、タイムスタンプ(created_at, updated_at )が自動的に維持されます。
public function roles(){
return $this->belongsToMany('\App\Models\Role')->withTimestamps();
}
②ロールモデルとロールテーブル作成
ロールモデルとロールテーブルを作成します。
php artisan make:model Role -m
③ロールモデルにユーザーモデルへのリレーション追加
App\Models\Roleファイルを開き、次を追加してください。
Userモデルとのリレーションを加えます。
public function users(){
return $this->belongsToMany('App\Models\User');
}
④ロールテーブルのマイグレーションファイル編集
database/migrations の中にできたマイグレーションファイルを編集します。
次の1行を加えてください。
$table->string('name');

⑤ユーザー×ロールテーブル作成
ユーザーテーブルとロールテーブルを連結させた【role_user】テーブルを作ります。
◆次のようにコマンドを打ってください。
php artisan make:migration create_users_roles_table --create=role_user
◆database/migrations の中にできたマイグレーションファイルに次の2行を加えます。
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('role_id');

◆マイグレートします。
php artisan migrate
⑥テスト
これで準備完了です。
最後にテストしてみましょう。
phpMyAdminにログインし、データベース内に【role_user】テーブルを確認してみてください。
テスト用に、roleテーブル、userテーブル、role_userテーブルにダミーで情報をいれておきます。
その後、ルート設定ファイル(routes/web.php)に下記を加えます。
Route::get('/pivot', function(){
$user=User::find(1);
foreach ($user->roles as $role) {
echo $role->pivot;
}
});
Laravelを起動し、【/pivot】ページを確認してみます。

上記のように、role_userテーブルにいれた情報が取り出せれば、無事成功。
ロールを割り当てたり、取り外したりするには attachやdetachというメソッドが使えます。
詳しくは、こちらの記事にて解説しています。



コメント