【问题标题】:How to get data from many to many relationship in laravel如何在laravel中从多对多关系中获取数据
【发布时间】:2019-05-11 03:28:06
【问题描述】:

我想将所有用户和相关角色检索到 laravel 中的一个表中。但我无法继续,因为我收到了错误调用

这是我的控制器功能

public function index(){
    if(Auth::user()->isAdmin==1){
        $users = User::with('roles')->get();
        return view('users', campact($users));
    } else {
        abort(403, 'Unauthorized action.');
    }
}

这是我的用户模型的角色功能

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

这是我的角色类的用户函数

public function users()
{
    return $this->belongsToMany(User::class,'role_users');
}

这是我的数据表

@foreach ($users as $user)
    <tr>
        <td>{{ $user->id }}</td>
        <td>{{ $user->name }}</td>
        <td>{{ $user->email }}</td>
        <td>
            <form method="post">
            {{ csrf_field() }}
            <div class="form-group">                
                <select class="form-control" data-id="{{$user->id}}" id="role" name="role">
                    <option value="0">Select a Role</option>
                    @foreach ($users->roles as $role)
                    <option  value="{{ $role->id }}">{{ $role->name }}</option>
                    @endforeach
                </select>
            </div>  
            </form>          
        </td>
        <td>{{ $user->created_at }}</td>
        <td>{{ $user->updated_at }}</td>

        <td><div class="form-group">
            <form method="post" id="userActivate">
            {{ csrf_field() }}
            <label>
                <input type="checkbox" class="flat-red isActive" data-id="{{$user->id}}" @if ($user->isActive) checked @endif>
            </label>

        </form>
    </div>       
        </td>
        <td>
            <form id="userDelete" method="post" >
                {{ csrf_field() }}
                <button type="button" id="delete" data-id="{{$user->id}}" class="btn btn-block btn-danger btn-flat">Delete</button>
            </form>
        </td>
    </tr>
@endforeach

请帮我解决这个问题。

【问题讨论】:

  • 您想从role_user 表中检索什么?
  • campact 应该(我假设)是compact
  • 请提供错误信息。你有role_user 表吗?
  • campact 已更正为紧凑型。但同样的错误称为“未定义变量:用户(视图:/var/www/html/laravel/resources/views/users.blade.php)”
  • 是的,我有角色用户表,我想检索与每个用户关联的角色

标签: php laravel many-to-many


【解决方案1】:

编辑这一行:

return view('users', campact($users));

到:

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

【讨论】:

  • 它收到错误“此集合实例上不存在属性 [roles]。(查看:/var/www/html/laravel/resources/views/users.blade.php)”
【解决方案2】:

更改您的控制器代码

public function index(){
  $users = User::with('roles') // Eager loading
               ->get();
  return view('users')->with('users', $users);
}

然后,从

更改您的刀片代码
@foreach ($users->roles as $role)
    <option value="{{ $role->id }}">{{ $role->name }}</option>
@endforeach

@if(count($user->roles) > 0)
@foreach ($user->roles as $role)
    <option value="{{ $role->id }}">{{ $role->name }}</option>
@endforeach
@endif

【讨论】:

  • 即使我收到一个名为“未定义属性:stdClass::$roles (View: /var/www/html/laravel/resources/views/users.blade.php)”的错误
  • 让我们尝试在控制器中返回$user 然后查看结果
  • 然后再次出现错误,称为“未定义变量:用户(视图:/var/www/html/laravel/resources/views/users.blade.php)”
  • 多对多关系的迁移名称是什么?
  • 2018_12_10_060451_create_role_users_table
猜你喜欢
  • 1970-01-01
  • 2019-05-23
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 2015-04-05
  • 2016-07-20
  • 2017-07-16
相关资源
最近更新 更多