📅  最后修改于: 2023-12-03 14:43:47.454000             🧑  作者: Mango
在 Laravel 中,多对多关系是通过中间表来实现的,而原始查询可以帮助我们在不使用 Eloquent 的情况下连接多对多关系。
假设我们有两张数据表 users
和 roles
,它们之间的关系是多对多。我们可以使用以下代码来创建它们的中间表:
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 来说比较低,因此要谨慎使用。