首页 > 解决方案 > 在 Laravel 中将 (User,Role,user_role) SQL 原始查询转换为 Eloquent

问题描述

尊敬的先生,我必须从 user_role 数据透视表中获取用户角色名称。

我使用 Sql Raw Query 成功完成了此操作。但我必须使用 Eloquent。请将下面的原始 sql 代码转换为 Eloquent,请帮助我先生,我是 laravel 的新手。


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

标签: phplaraveleloquent

解决方案


你可以试试 Laravel Eloquent 的manyToMany关系。这与您在此处使用数据透视表的设置完全相同。

将此方法添加到您的User模型中

function roles {
    return $this->belongsToMany('App\Role', 'user_roles', 'user_id', 'role_id');
}

在您的控制器中,您可以使用

$roles = User::with('roles:name')->where('id', $user->id)->get();

试试这个方法,你不需要对你的数据库做任何改变,只需调整你的模型和控制器。

有关更多信息,请参阅文档


推荐阅读