急切 loading/mutators/accessors 澄清 laravel
Clarification with eager loading/mutators/accessors for laravel
我正在制作一个 laravel 工作应用程序,我需要加载所有用户及其附加角色,而无需任何角色嵌套。我将本教程用于角色: https://medium.com/@ezp127/laravel-5-4-native-user-authentication-role-authorization-3dbae4049c8a 。如果我在我的用户模型上使用 public $with = ['roles'];
它 return 是用户对象中的整个角色对象,我需要它只是 return 角色:'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);
}
我认为通过将此添加到用户模型:
protected $appends = ['role_name'];
public function getRoleNameAttribute()
{
return $this->attribute['name'];
}
它会 return 一切,但它所做的只是创建一个 role_name:'user_name';在模型上。所以我想我意识到我正在访问数据库中的用户 table 而不是角色 table,但我又不确定该怎么做。任何帮助将不胜感激。
如果为了方便需要直接从模型中获取角色名称,请参考实际关系数据:
protected $appends = ['role_name'];
public function getRoleNameAttribute()
{
return $this->roles->pluck('name');
}
这应该将角色名称数组附加到您的用户模型。它将是一个数组,因为角色似乎与 User
模型具有多对多关系。
问题是您要在 getRoleNameAttribute
中返回 $this->attributes['name']
。你想要 role names
,所以你会做这样的事情:
如果您想要一个包含以下名称的数组:
return $this->roles()->pluck('name')
如果您希望名称为字符串:
return array_implode(", ", $this->roles()->pluck('name')->toArray());
我正在制作一个 laravel 工作应用程序,我需要加载所有用户及其附加角色,而无需任何角色嵌套。我将本教程用于角色: https://medium.com/@ezp127/laravel-5-4-native-user-authentication-role-authorization-3dbae4049c8a 。如果我在我的用户模型上使用 public $with = ['roles'];
它 return 是用户对象中的整个角色对象,我需要它只是 return 角色:'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);
}
我认为通过将此添加到用户模型:
protected $appends = ['role_name'];
public function getRoleNameAttribute()
{
return $this->attribute['name'];
}
它会 return 一切,但它所做的只是创建一个 role_name:'user_name';在模型上。所以我想我意识到我正在访问数据库中的用户 table 而不是角色 table,但我又不确定该怎么做。任何帮助将不胜感激。
如果为了方便需要直接从模型中获取角色名称,请参考实际关系数据:
protected $appends = ['role_name'];
public function getRoleNameAttribute()
{
return $this->roles->pluck('name');
}
这应该将角色名称数组附加到您的用户模型。它将是一个数组,因为角色似乎与 User
模型具有多对多关系。
问题是您要在 getRoleNameAttribute
中返回 $this->attributes['name']
。你想要 role names
,所以你会做这样的事情:
如果您想要一个包含以下名称的数组:
return $this->roles()->pluck('name')
如果您希望名称为字符串:
return array_implode(", ", $this->roles()->pluck('name')->toArray());