【问题标题】:LaraveL : How to get data from many to many relationshipLaraveL:如何从多对多关系中获取数据
【发布时间】:2017-03-11 11:46:06
【问题描述】:

我有 3 个表,它们是 user->id、name、password、roles->id、role、role_user->role_id、user_id

现在,如果我想在视图页面中显示相关数据意味着与用户相关的角色..我如何在视图中做到这一点? 表示我想显示用户是否具有角色,否则将被选中

这是我的控制器:

$users = User::all();
$roles = Role::all();
return view("Permission::assign_role",compact('users','roles'));

查看页面

<table class="table">
    <thead>
    <tr>
        <th>SL No</th>
        <th>Name</th>
        <th>Role</th>
    </tr>
    </thead>
    <tbody>
    <?php $i = 1; ?>
    @foreach($users->roles() as $row)
    <tr>
        <td>{{$i}}</td>
        <td>{{$row->name}}</td>
        <td><input type="checkbox" name="role_id" checked> $role->role</td>
    </tr>

    <?php $i++; ?>

    @endforeach
    </tbody>
</table>

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    Eager load数据:

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

    在视图中,如果您想检查用户是否具有特定角色,您可以执行以下操作:

    @if ($user->roles->contains($roleId))
    

    如果您只想迭代用户的角色:

    @foreach($users->roles as $role)
        {{ $role->name }}
    

    【讨论】:

    • 当我尝试获取{{$role-&gt;role}} 的属性时,因为角色是属性名称,我看到以下错误Property [roles] does not exist on this collection instance.
    • @User57 使用dd() 查看它有什么数据。像这样{{ dd($role) }}
    • 当我 dd($users),in "roles" => Collection 我得到以下输出 #attributes: array:5 [▼ "id" =&gt; 1 "role" =&gt; "admin" "label" =&gt; "Admin" "created_at" =&gt; "2017-03-11 06:02:12" "updated_at" =&gt; "2017-03-11 06:02:12"
    • @User57 然后你做对了,在视图的另一部分出现错误。该错误表明您在某处使用roles 而不是role
    【解决方案2】:

    这是我在应用程序中使用的方式:

    用户模型:

    public function roles() {
            return $this->belongsToMany(Role::class);
        }
    

    榜样:

    public function user() {
            return $this->belongsToMany(User::class);
        }
    

    在我的控制器中:

    $users = User::all();
    

    在我看来

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

    【讨论】:

    • 数据库中没有任何结果。我从您的解决方案中看到了空白页
    猜你喜欢
    • 2019-05-23
    • 1970-01-01
    • 2019-05-11
    • 2015-04-05
    • 1970-01-01
    • 2019-09-16
    • 2020-07-03
    • 1970-01-01
    相关资源
    最近更新 更多