php - 在 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();
解决方案
你可以试试 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();
试试这个方法,你不需要对你的数据库做任何改变,只需调整你的模型和控制器。
有关更多信息,请参阅文档
推荐阅读
- solid-principles - SOLID - SRP,一份工作或改变的一个原因
- javascript - 在 vue.js 中为每个循环使用计算数据
- python - 是否可以使用同一模型中的其他字段数据制作 django 管理字段过滤器?
- python - pyinstaller - 冻结应用程序时 QtWebEngineWidgets 抛出 dll 错误
- ios - 标签隐藏很慢
- c# - 我只看到项目模板 blazorserver,为什么我没有看到项目模板 blazor、blazorhosted、blazorlib、blazorserverside?
- python - 在 Open cv 中为彩色图像应用蒙版
- pandas - 处理 Excel 数据时选择 pandas 而不是 xlsxwriter
- opencv - 将 Harcascading 文件与您自己的训练有素的 SVM 文件一起使用
- c - “向存档文件添加索引”是什么意思?