如何在Laravel中使用Eloquent Relationship在视图中显示两个表数据

时间:2018-01-20 20:02:52

标签: php laravel eloquent

我有两个表名称是用户角色表。我在Laravel Eloquent中使用数据透视表名称 Role_User 在他们之间设置了许多关系。 现在,我想使用Eloquent Relationship将两个表数据一起显示在一个视图中。(例如,我想在我的视图中显示来自用户表的用户包含角色中的哪个角色表)

这是我雄辩的关系。

public function roles()
{
    return $this->belongsToMany('App\Role');
}
public function users()
{
    return $this->belongsToMany('App\User');
}

我的,有说服力的关系查询。

    $users=User::with('roles')->get();

    return view('admin',compact('users'));

我在我的视图中尝试。

    @foreach($users as $user)
    <tr>
        <td>{{$user->name}}</td>
        <td>{{$user->email}}</td>
        <td>{{$user->roles->name}}</td>
        <td></td>
    </tr>
    @endforeach

3 个答案:

答案 0 :(得分:3)

当您致电$user->roles时,您会收到一系列角色。因此,如果您想将它们全部显示在一个字符串中,您只需要在该字符串上内嵌集合:

<td>{{$user->roles->implode('name', ', ')}}</td>

答案 1 :(得分:0)

您的$user->rules是角色集合模型的实例。你可以再使用一个foreach:

@foreach($users as $user)
    //do something with user
    @foreach($user->roles as $role)
        {{$role->name}}
    @endforeach
@endforeach

答案 2 :(得分:0)

这将适用于Laravel 5.0及更高版本 如果我们有两个Model User和Mark。然后在用户模型内部创建一个与Mark关系的函数。例子

public function marks()
    {
        return $this->hasMany('App\Models\Mark');
    } 

因此,如果要显示用户名,将显示他的所有标记。然后在控制器内部执行以下方法。

    public function getUserMarks(){

        $result = User::select('email', 'name')->where('email', 'usermail@example.com')->with(['marks'])->get();
        return view('welcome', compact('results'));
    }