从laravel关系中显示值?

时间:2017-02-20 12:09:36

标签: mongodb laravel relationship

我正在使用带有mongodb的laravel 5.1,我需要在刀片上显示用户列表,我正在使用Laravel关系方法(hasMany),我试过但我得到了

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

表格结构:

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

我的问题很简单,我希望用户表中带有rolename的用户详细信息,我已经附上了我的查询结果图片。请问有什么结果吗? 控制器:

$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

4 个答案:

答案 0 :(得分:0)

你的雄辩和关系是错误的。 用户属于角色,角色有很多用户。

来自用户模型:

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

来自user_roles模型:

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

答案 1 :(得分: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>

上面的代码将创建包含用户名及其角色的表。

希望它可以帮到你!

答案 2 :(得分:0)

在控制器中将代码更新到此

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

答案 3 :(得分:0)

在我更换刀片之后它正在工作,谢谢大家

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