拉拉维尔 |雄辩的 foreach 不起作用
Posted
技术标签:
【中文标题】拉拉维尔 |雄辩的 foreach 不起作用【英文标题】:laravel | eloquent foreach not working 【发布时间】:2017-09-02 10:11:09 【问题描述】:我正在尝试从我的用户表中检索所有非管理员用户。 像这样
$agents = User::where('is_admin','=', 'false')->get();
//didn't work
foreach ($agents as $agent=>$value)
echo "$agent=>$value"."<br>";
//tried dumping
dd($agents);
但它不起作用,所以我尝试转储变量以检查它是否有任何结果,我现在有一个非管理员:这是输出
Collection #219 ▼
#items: array:1 [▼
0 => User #222 ▼
#casts: array:1 [▶]
#fillable: array:6 [▶]
#hidden: array:2 [▶]
#connection: null
#table: null
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:10 [▶]
#original: array:10 [▶]
#dates: []
#dateFormat: null
#appends: []
#events: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#visible: []
#guarded: array:1 [▶]
#rememberTokenName: "remember_token"
]
请帮忙
【问题讨论】:
您要打印什么...您在这里返回一个集合...您的表中有多少非管理员用户?而且你不能回显集合,回显仅用于简单的东西,字符串和整数等 @lewis4u 我正在尝试获取所有非管理员的详细信息。我目前有一个非管理员,但这个数字会增加。我想使用 foreach 打印它们 【参考方案1】:如果您有类似 $items = items::all();
的查询,但您想要从集合中获取特定值,例如 $items->barcode
,该怎么办?
在尝试 dd($items) 时,项目以数组形式返回,这需要我知道每个 ID 才能获得适当的结果($items[id]->barcode)
。
我猜答案是有一个 foreach 循环?
【讨论】:
【参考方案2】:$agents = User::where('is_admin','=', 'false')->pluck('value', 'agent');
foreach ($agents as $agent=>$value)
echo "$agent=>$value"."<br>";
使用 pluck 您会将对象转换为数组,因此您可以通过 key => value
以您想要的方式使用 foreach。
如果您需要访问模型的其他属性,则需要执行以下操作:
$agents = User::where('is_admin','=', 'false')->get();
foreach ($agents as $agent)
echo "$agent->id=>$agent->name"."<br>";
这样你只需要使用$agent
和->
加上你想要的属性。
【讨论】:
使用 pluck 返回一个集合,而不是一个数组。 (来自 Laravel 5.3 版^) @lewis4u 它将返回带有数组的集合,而不是带有对象的集合。 @BigBoss 您的方法有效,尽管我必须在 pluck 中专门传递字段名称。有没有在 pluck 中指定所有字段而不指定它们? @SapneshNaik 所有字段都在那里。你只需要给他们看......像 $agent->name , $agent->address 制作一个表格或一些引导网格 @lewis4u 他指出他只是在尝试,以便使用正确的数据设置视图。【参考方案3】:尝试使用此代码来回显有关所有非管理员的信息:
$agents = User::where('is_admin','=', 'false')->get();
foreach ($agents as $agent)
foreach($agent as $property => $value)
echo "$property => $value"."<br>";
echo "<br/>----------------------<br/>";
【讨论】:
【参考方案4】:你的控制器应该是这样的:
public function index()
$agents = User::where('is_admin','=', 'false')->get();
return view('viewfile', compact('agents'));
然后在该视图文件中在刀片视图中创建 foreach 循环
@foreach ($agents as $agent)
$agent->name
@endforeach
【讨论】:
在我确认它在我的控制器(使用 foreach)中按预期打印后,我试图将变量传递给视图 是的,我会尝试,我只是想确保在将数据传递给我的视图之前我有正确的数据。我想知道为什么它在控制器中不起作用? 尝试在控制器中使用 print_r() 或 var_dump()【参考方案5】:这里的$agents
是Std Class object array
。所以访问它的元素试试这个:
foreach ($agents as $agent)
$agent->name;
【讨论】:
以上是关于拉拉维尔 |雄辩的 foreach 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
required_if 带有数组验证规则的验证规则不起作用 |拉拉维尔 |验证