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

时间:2015-04-13 22:41:56

标签: php eloquent laravel-5

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

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

然后一切都好,它返回用户,并在该实例中分配2个角色。 然而,我无法解决这个问题:

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

2 个答案:

答案 0 :(得分:1)

我认为你只需要使用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文档。

答案 1 :(得分:1)

如果你自己使用findOrFail而没有链接另一个方法User::findOrFail(1),它将返回一个集合,但是一旦你开始添加其他条件,你必须为一组用户调用->get(),{{1对于单个用户对象,或者对->first执行某些操作,您将获得一个数组。否则你将获得构建器类,这里是{{dd(User :: where(&#39; id&#39;,1))}}

的示例
->last()

Builder类就像一个从未执行过的预处理语句。致电->lists()时,您应该看到类似于以下内容的内容。

这将为您提供一个集合{{dd(\ App \ User :: where(&#39; id&#39;,1) - &gt; get())}}

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

或者使用{{dd(\ App \ User :: where(&#39; id&#39;,1) - &gt; first())}}获取单个对象

dd()

最后一个数组{{dd(\ App \ User :: where(&#39; id&#39;,1) - &gt; list(&#39; email&#39;,&#39; id& #39;))}}

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
    }
  ]
}

希望这有帮助。