2017-02-20 61 views
0

我使用laravel 5.1 mongodb的,我需要在刀片顯示,我使用Laravel關係法(的hasMany)的用戶列表,我試圖,但我得到顯示laravel關係的值?

error(Undefined property: Illuminate\Database\Eloquent\Collection::$roles) 

表結構:

users-> userid, username,email, roleid. 
user_roles->roleid,rolename; 

我的問題很簡單,我想從用戶表與角色名userdetails,我附上了我的查詢結果image.any請問? 控制器:

$users =User::with('roles')->get(); 
return view('Manage_users', compact('users')); 

用戶模型:

class User extends Eloquent 
{ 
    protected $collection = 'users'; 

    public function roles() 
    { 
     return $this->hasMany('App\User_role','roleid','roleid'); 
    } 

} 

User_roles型號:

class User_role extends Eloquent 
{ 
    protected $collection = 'user_roles'; 


    public function user() 
    { 
     return $this->belongsTo('App\User','roleid','rolename'); 
    } 
} 

My query result image

My view page result

回答

0

你說錯話和關係是錯誤的。 用戶屬於角色,角色擁有多個用戶。

從用戶型號:

public function role() 
{ 
    return $this->belongsTo('App\User_role','roleid','id'); 
} 

從user_roles型號:

public function users() 
{ 
    return $this->hasMany('App\User','roleid','id'); 
} 
+0

用戶可以有多個角色。你覺得@雷誠怎麼樣? –

+0

不,一個用戶只有一個角色 –

+0

@VaibhavrajRoham,一個用戶有一個角色,你可以從表結構中獲得。 –

0

您可以使用您的視圖下面的代碼。

<table> 
    <tr> 
     <th>User Name</th> 
     <th>Role</th> 
    </tr> 
    @foreach($users as $user) 
     <tr> 
      <td>{{ $user->username }}</td> 
      <td>{{ $user->roles->rolename }}</td> 
     </tr> 
    @endforeach 

</table> 

上面的代碼將創建帶有用戶名和它的角色的表。

希望它可以幫助你!

+0

根據[此圖像鏈接](https://i.stack.imgur.com/TDqa0.png)上面的答案應該工作 –

+0

它顯示錯誤「嘗試獲取非對象的屬性」 –

+0

如果沒有爲用戶分配任何角色,它將失敗(如錯誤)。 –

0

在控制器更新您的代碼以這種

$users = User::with('roles')->whereHas('roles', function ($query) { 
            $query->where('roleid', '>', 0); 
           })->get(); 
return view('Manage_users', compact('users')); 
+0

它的返回空列表, 集合{#215▼ #items:[ ] } –

+0

@MuMuthukumar有可能某些用戶可能沒有分配任何角色? –

+0

不,所有用戶都有一些角色,如管理員,承包商,檢查員 –

0

它的工作後,我改變我的刀片這樣的,感謝所有

@foreach($users as $user) 
    <tr> 
     <td>{{ $user->username }}</td> 
     <td> 
      @if ($user->roles) 
       {{ $user->roles->rolename }} 
      @endif 
     </td> 
    </tr> 
@endforeach