拉拉维尔 |雄辩的 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-&gt;barcode,该怎么办?

在尝试 dd($items) 时,项目以数组形式返回,这需要我知道每个 ID 才能获得适当的结果($items[id]-&gt;barcode)

我猜答案是有一个 foreach 循环?

【讨论】:

【参考方案2】:
$agents = User::where('is_admin','=', 'false')->pluck('value', 'agent'); 

foreach ($agents as $agent=>$value) 
echo "$agent=>$value"."<br>";

使用 pluck 您会将对象转换为数组,因此您可以通过 key =&gt; value 以您想要的方式使用 foreach。

如果您需要访问模型的其他属性,则需要执行以下操作:

$agents = User::where('is_admin','=', 'false')->get(); 

foreach ($agents as $agent) 
echo "$agent->id=>$agent->name"."<br>";

这样你只需要使用$agent-&gt;加上你想要的属性。

【讨论】:

使用 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】:

这里的$agentsStd Class object array。所以访问它的元素试试这个:

foreach ($agents as $agent) 

    $agent->name;

【讨论】:

以上是关于拉拉维尔 |雄辩的 foreach 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

显示功能不起作用。无法按 id 检索元素。拉拉维尔 5.8

required_if 带有数组验证规则的验证规则不起作用 |拉拉维尔 |验证

拉拉维尔。迁移。添加字段[重复]

用于显示集合的刀片组件继承。拉拉维尔 7

拉拉维尔。从 SQL SERVER 检索图像。数据类型:图片

Laravel 雄辩的关系多对一不起作用