Laravelのピボットモデルにおけるリレーションの使い方


まず、多対多の関係を持つ2つのモデルがあると仮定しましょう。例えば、UserモデルとRoleモデルです。これらのモデル間の関係を管理するために、中間テーブルであるrole_userテーブルを作成します。

  1. ピボットモデルの作成 まず、LaravelのArtisanコマンドを使用して、ピボットモデルを作成します。
php artisan make:model UserRole --pivot

上記のコマンドを実行すると、app/Models/UserRole.phpというファイルが生成されます。このファイルがピボットモデルになります。

  1. ピボットモデルの設定 ピボットモデルでは、$tableプロパティを使用して中間テーブルの名前を指定します。また、belongsToManyメソッドを使用して関連するモデルを定義します。
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\Pivot;
class UserRole extends Pivot
{
    protected $table = 'role_user';
    public function users()
    {
        return $this->belongsToMany(User::class, 'role_user', 'role_id', 'user_id');
    }
    public function roles()
    {
        return $this->belongsToMany(Role::class, 'role_user', 'user_id', 'role_id');
    }
}

上記の例では、usersメソッドとrolesメソッドでそれぞれUserモデルとRoleモデルとの関連を定義しています。

  1. リレーションの使用 UserモデルとRoleモデルでは、ピボットモデルを介して関連を定義します。
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
    public function roles()
    {
        return $this->belongsToMany(Role::class, 'role_user', 'user_id', 'role_id')->using(UserRole::class);
    }
}

Roleモデルも同様に定義します。

以上で、UserモデルとRoleモデルの間に多対多の関係を持つピボットモデルが設定されました。この関係を使って、ユーザーが持つロールやロールに所属するユーザーなどの情報を取得することができます。

これは、Laravelにおけるピボットモデルと関連するリレーションの基本的な使い方です。必要に応じて、他のリレーションメソッドや追加の設定を行うこともできます。