显示laravel关系的值?

问题描述:

我使用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

你说错话和关系是错误的。 用户属于角色,角色拥有多个用户。

从用户型号:

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,一个用户有一个角色,你可以从表结构中获得。 –

您可以使用您的视图下面的代码。

<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

如果没有为用户分配任何角色,它将失败(如错误)。 –

在控制器更新您的代码以这种

$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

不,所有用户都有一些角色,如管理员,承包商,检查员 –

它的工作后,我改变我的刀片这样的,感谢所有

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