📜  laravel 原始查询连接多对多 - PHP (1)

📅  最后修改于: 2023-12-03 14:43:47.454000             🧑  作者: Mango

Laravel 原始查询连接多对多 - PHP

在 Laravel 中,多对多关系是通过中间表来实现的,而原始查询可以帮助我们在不使用 Eloquent 的情况下连接多对多关系。

例子

假设我们有两张数据表 usersroles,它们之间的关系是多对多。我们可以使用以下代码来创建它们的中间表:

Schema::create('role_user', function (Blueprint $table) {
    $table->unsignedBigInteger('user_id');
    $table->unsignedBigInteger('role_id');
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
    $table->primary(['user_id', 'role_id']);
});

接下来,我们将创建一个原始查询来连接这两张表:

$users = DB::table('users')
    ->join('role_user', 'users.id', '=', 'role_user.user_id')
    ->join('roles', 'role_user.role_id', '=', 'roles.id')
    ->select('users.name', 'roles.name as role')
    ->get();

在这个查询中,我们使用了 join() 方法来连接三张表,然后使用 select() 方法选择需要的列,并最终使用 get() 方法获取结果。

总结

使用原始查询连接多对多关系并不复杂,只需要熟悉多对多关系的中间表结构和原始查询的语法即可。当我们需要进行一些复杂的查询时,原始查询是一个不错的选择。不过需要注意的是,原始查询的可读性相对于 Eloquent 来说比较低,因此要谨慎使用。