【问题标题】:Laravel 5 - Getting all records from a collection within a pivotLaravel 5 - 从枢轴内的集合中获取所有记录
【发布时间】:2015-04-13 22:41:56
【问题描述】:

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

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

然后一切都好,它返回用户,并在该实例中返回分配的 2 个角色。 但是,我无法理解的是:

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

【问题讨论】:

  • 我认为你需要展示一些你正在尝试但不起作用的工作。

标签: php eloquent laravel-5


【解决方案1】:

如果您单独使用 findOrFail 而不链接另一个方法 User::findOrFail(1),它将返回一个集合,但是一旦您开始添加其他条件,您必须为用户集合调用 ->get()->first->last()对于单个用户对象,或者如果您使用 ->lists() 执行某些操作,您将获得一个数组。否则,您将获得构建器类,这是 {{ 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 类就像一个从未执行过的准备好的语句。致电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"
]

希望这会有所帮助。

【讨论】:

  • 谢谢,我觉得自己像个白痴,我一回到 laravel 文档就读完这篇文章后,我马上看到了答案,不知道为什么我错过了,再次感谢
【解决方案2】:

我认为你只需要使用 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 的详细信息在eloquent 文档中。

【讨论】:

  • 也谢谢你,循环将完全满足我的要求。
猜你喜欢
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
  • 2017-09-30
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多