![](/img/trans.png)
[英]Laravel 5 new auth: Get current user and how to implement roles?
[英]Laravel Auth::user()->roles()->get() is empty
我開始學習一些 Laravel。 我正在一個網站上工作,您可以在其中創建一個帳戶,該帳戶可以擁有角色,並且根據您擁有的角色,您可以做一些事情。 它是什么並不重要,但讓我解釋整個情況。
我有3張桌子:
users
,它存儲有關所有用戶的信息。roles
,它存儲有關所有角色的信息(只是id
+ name
)user_roles
,它存儲用戶擁有哪些角色。 它有一個id
列(用於 PK)、一個user_id
列(作為 FK 給users
. id
)和一個role_id
列(作為 FK 給roles
. id
)我有 2 個模型:
模型用戶:
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password', 'mood'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
public function roles() {
return $this->belongsTo('App\Role');
}
}
模特角色:
class Role extends Model
{
protected $table = 'roles';
protected $fillable = ['role'];
}
現在,我在其中一個控制器中所做的是添加以下行:
var_dump(Auth::user()->roles()->get())
所以我得到了我的用戶,我登錄了,我添加了一個角色,我添加了一個新的 user_roles 行(使用我的用戶 ID 和我添加的角色的 ID)。 但是, var_dump 仍然返回一個空數組,而不是我所擁有的角色。 我不明白我做錯了什么
User
- Role
是 M:M 關系。 一個用戶可以有多個角色; 而且,一個角色可以被多個用戶使用。
對於多對多關系,Laravel (Eloquent) 提供了belongsToMany
方法。 這是文檔: https : //laravel.com/docs/5.6/eloquent-relationships#many-to-many
因此,您需要在User
類中替換此方法:
public function roles() {
return $this->belongsTo('App\Role');
}
有了這個:
public function roles() {
return $this->belongsToMany('App\Role');
}
此外,您需要告訴 Laravel 數據透視表的名稱。 你可以將它作為第二個參數傳遞給belongsToMany
方法,或者只是將它命名為roles_users
,Laravel 會弄清楚(它是如何做到的,也在文檔中)。
這不是belongsTo 的工作方式,您需要使用不同的關系方法,因為belongsTo 檢查用戶模型中不存在的“roles_id”列。
hasManyThrough 應該可以解決問題 iirc
我不會為您提供直接的解決方案,因為它會更有魅力而不是幫助,但您需要閱讀https://laravel.com/docs/5.6/eloquent-relationships 上的文檔
文檔中有如何通過中間某處的用戶表獲取國家/地區帖子的示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.