laravel - 对 laravel 的急切加载/修改器/访问器进行澄清
问题描述
我正在为工作制作一个 laravel 应用程序,我需要加载所有用户及其附加角色,而不需要任何角色嵌套。我将本教程用于角色:https ://medium.com/@ezp127/laravel-5-4-native-user-authentication-role-authorization-3dbae4049c8a 。如果我 public $with = ['roles'];
在我的用户模型上使用它会返回用户对象中的整个角色对象,我需要它只返回角色:'role_name';
/**
* set up eloquent between roles/user
*
* @return \Illuminate\Database\Eloquent\Relations\belongsToMany
*/
public function roles()
{
return $this->belongsToMany(Role::class);
}
上面是我的用户模型,下面是我的角色模型来定义关系。
/**
* provides a many-to-many relationship to User model
*
* @return User::class
*/
public function users()
{
return $this->belongsToMany(User::class);
}
我认为通过将其添加到 User 模型中:
protected $appends = ['role_name'];
public function getRoleNameAttribute()
{
return $this->attribute['name'];
}
它会返回所有内容,但它所做的只是创建一个角色名称:'user_name';在模型上。所以我想我意识到我正在访问的只是用户表而不是数据库中的角色表,但再次不确定该怎么做。任何帮助将不胜感激。
解决方案
如果为了方便您需要直接从模型中访问角色名称,您应该参考实际的关系数据:
protected $appends = ['role_name'];
public function getRoleNameAttribute()
{
return $this->roles->pluck('name');
}
这应该将角色名称数组附加到您的用户模型中。这将是一个数组,因为角色似乎与模型具有多对多的关系User
。
推荐阅读
- javascript - 关闭 pinpad 类或将可见性设置为无
- python - 如何在 Slack-bolt 中添加正确的回复功能?
- javascript - 在 React 中使用 Joi 模式的密码匹配验证不起作用
- ios - 使用 NSURLSession 创建 WebSocket 并回退到 HTTPS 轮询
- c++ - 无法启动 Nektar++ 求解器
- .net - .NET Core:从 DbContext 检索 MigrationsSqlGenerator 实例
- c++ - 有没有办法在 MOSEK 中将表达式转换为变量
- hsm - 我是 HSM 的新手,如何将密钥从一个物理 HSM 复制到另一个?
- routes - 如何将 WiFi AP 连接到 OVS 网桥?
- amazon-s3 - 使用 Javascript 'aws-sdk' v3 获取上传的对象 URL