好的,所以我在我的用户和角色表之间建立了关系,一切都很顺利,直到我试图获取每条记录。例如,如果我选择:
User::with('roles')->findOrFail(1);
然后一切都好,它返回用户,并在该实例中分配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
}
]
}
希望这有帮助。