簡體   English   中英

Laravel Auth::user()->roles()->get() 為空

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM