Laravel 5 - 从数据透视表中的集合中获取所有记录

Laravel 5 - Getting all records from a collection within a pivot

好的,所以我正在我的用户和角色之间建立关系 table,一切都很顺利,直到我尝试获取每条记录。例如,如果我只是选择:

User::with('roles')->findOrFail(1);

那么一切都很好,它 returns 用户和在那个实例中分配的 2 个角色。 然而,我无法理解的是:

假设我想要获取所有用户及其所有角色,以便我可以在 table 中显示它们,例如,我该怎么做?我似乎无法理解它。

我认为你只需要使用 get,这就是你应该做的。

控制器:

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

在您的视图文件中,如果用户可以拥有多个角色,您应该使用另一个 foreach:

查看:

@foreach ($user as $user)

    <h1>{{ $user->name }}</h1>

    @foreach ($user->roles as $role)

        <h2>{{ $role->id }}</h2>

    @endforeach

@endforeach

关于 eager loading is on eloquent 文档的详细信息。

如果您单独使用 findOrFail 而没有链接另一个方法 User::findOrFail(1),它将 return 一个集合,但是一旦您开始添加其他条件,您必须为一个集合调用 ->get()用户数,->first->last() 用于单个用户对象,或者如果您使用 ->lists() 执行某些操作,您将获得一个数组。否则,您将获得生成器 class,这是 {{ dd(User::where('id', 1)) }}

的示例
Builder {#1097 ▼
  #query: Builder {#1096 ▶}
  #model: User {#409 ▶}
  #eagerLoad: array:1 [▶]
  #macros: array:4 [▶]
  #onDelete: Closure {#1102 ▶}
  #passthru: array:12 [▶]
}

Builder class 就像一个从未执行过的准备好的语句。调用 dd() 时,您应该会看到类似于以下内容的内容。

这会给你一个集合 {{ dd(\App\User::where('id', 1)->get()) }}

Collection {#1105 ▼
  #items: array:1 [▼
    0 => User {#1108 ▼
      #cardUpFront: false
      #dates: array:3 [▶]
      #table: "users"
      #fillable: array:2 [▶]
      #hidden: array:2 [▶]
      #connection: null
      #primaryKey: "id"
      #perPage: 15
      +incrementing: true
      +timestamps: true
      #attributes: array:17 [▶]
      #original: array:17 [▶]
      #relations: []
      #visible: []
      #appends: []
      #guarded: array:1 [▶]
      #casts: []
      #touches: []
      #observables: []
      #with: []
      #morphClass: null
      +exists: true
      #forceDeleting: false
    }
  ]
}

或使用 {{ dd(\App\User::where('id', 1)->first()) }}

获取单个对象
User {#1108 ▼
  #cardUpFront: false
  #dates: array:3 [▶]
  #table: "users"
  #fillable: array:2 [▶]
  #hidden: array:2 [▶]
  #connection: null
  #primaryKey: "id"
  #perPage: 15
  +incrementing: true
  +timestamps: true
  #attributes: array:17 [▶]
  #original: array:17 [▶]
  #relations: []
  #visible: []
  #appends: []
  #guarded: array:1 [▶]
  #casts: []
  #touches: []
  #observables: []
  #with: []
  #morphClass: null
  +exists: true
  #forceDeleting: false
}

最后是一个包含 {{ dd(\App\User::where('id', 1)->lists('email','id')) }} 的数组

array:1 [▼
  1 => "godfrey17@example.net"
]

希望对您有所帮助。