📜  laravel 示例 stackoverflow 中的多对多关系 - PHP (1)

📅  最后修改于: 2023-12-03 15:17:15.947000             🧑  作者: Mango

Laravel 示例 StackOverflow 中的多对多关系 - PHP

在 Laravel 中,实现多对多关系非常简单。本文将介绍如何使用 Laravel 中的 Eloquent ORM 实现多对多关系。

步骤一:生成数据库迁移

首先我们需要创建两个表格,一个是用来存储用户的表格,另一个是用来存储角色的表格。

我们可以使用以下命令生成迁移:

php artisan make:migration create_users_table --create=users

php artisan make:migration create_roles_table --create=roles

接下来,在 create_users_table 迁移文件中,我们需要定义用户表格的列:

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();
});

create_roles_table 迁移文件中,我们需要定义角色表格的列:

Schema::create('roles', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->timestamps();
});
步骤二:生成中间表格迁移

接下来,我们需要创建一个中间表格来存储用户和角色之间的关系。

我们可以使用以下命令生成中间表格迁移:

php artisan make:migration create_role_user_table --create=role_user

然后,在中间表格迁移文件中我们需要定义两个外键列和时间戳列:

Schema::create('role_user', function (Blueprint $table) {
    $table->unsignedInteger('role_id');
    $table->unsignedInteger('user_id');
    $table->timestamps();

    $table->foreign('role_id')->references('id')->on('roles')
            ->onUpdate('cascade')->onDelete('cascade');
    $table->foreign('user_id')->references('id')->on('users')
            ->onUpdate('cascade')->onDelete('cascade');

    $table->primary(['role_id', 'user_id']);
});
步骤三:定义模型

接下来,我们需要定义用户和角色的模型以及它们之间的关系。

User 模型中,我们需要定义与 Role 模型的多对多关系:

class User extends Authenticatable
{
    use Notifiable;

    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }
}

Role 模型中,我们需要定义与 User 模型的多对多关系:

class Role extends Model
{
    public function users()
    {
        return $this->belongsToMany(User::class);
    }
}
步骤四:定义路由和控制器

接下来,我们需要定义路由和控制器来展示用户和角色之间的关系。

routes/web.php 文件中,我们可以定义以下路由:

Route::get('/', 'RoleController@index');

然后,在 app/Http/Controllers/RoleController.php 控制器中,我们可以定义以下方法来获取所有角色及其对应的用户:

class RoleController extends Controller
{
    public function index()
    {
        $roles = Role::with('users')->get();

        return view('welcome', compact('roles'));
    }
}

最后,我们可以在 resources/views/welcome.blade.php 文件中展示用户和角色之间的关系:

@foreach ($roles as $role)
    <h2>{{ $role->name }}</h2>

    <ul>
        @foreach ($role->users as $user)
            <li>{{ $user->name }}</li>
        @endforeach
    </ul>
@endforeach
总结

以上就是如何在 Laravel 中实现多对多关系的完整教程。我们首先生成了用户和角色的表格迁移,然后定义了中间表格迁移。接下来,我们定义了用户和角色之间的模型关系,并定义了路由和控制器来展示这些关系。

如果您在学习 Laravel 过程中遇到了任何问题,可以在 StackOverflow 上提问获得帮助。