【问题标题】:Laravel foreach loop returning more results than correctLaravel foreach 循环返回的结果多于正确的结果
【发布时间】:2014-05-27 11:32:43
【问题描述】:

我的 foreach 循环应该只返回 1 个结果,但是,它返回三个相同的结果!

我正在使用 Blade 作为模板 -

{{count($alerts)}}

返回“1”。但是下面的foreach循环:

@foreach($alerts as $alert)
    <tr>
        <td>{{ $alerts->id }}</td>
    </tr>
@endforeach

传递数据数组的控制器函数是:

public function getIndex()
{

    $id     = Auth::user()->id;    
    $alert = Alert::find($id);      
    $this->layout->content = View::make('index', array('alerts' => $alert));

}

DD($alert) 也只返回 1 个结果。

任何帮助将不胜感激。

【问题讨论】:

  • &lt;td&gt;{{ $alerts-&gt;id }}&lt;/td&gt;: 应该是&lt;td&gt;{{ $alert-&gt;id }}&lt;/td&gt;。更改$alerts -> $alert
  • 不幸的是,从 $alerts 更改为 $alert 会返回此错误 - ErrorException - Trying to get property of non-object
  • 好吧,如果你把Alert模型类的代码和var_dump($alert)的内容发给我们,我可能会帮助你。
  • 另外,您的视图可能需要一个数组而不是一个对象。所以你应该将它封装在数组中:View::make('index', array('alerts' =&gt; array($alert)));
  • 封装 $alert 变量已更正它。谢谢!我确实有另一个可以正常工作的 foreach 循环(但默认情况下它有多个结果)。这个错误是因为 1 个结果吗?

标签: php foreach laravel blade


【解决方案1】:

为了正确回答您的问题,我将在此处发布解决方案:

$alert = Alert::find($id);

将仅返回 1 个具有唯一标识符的对象,例如id。它不应转动超过 1 个物体。

因此,由于您的 view 有一个 foreach 循环,它需要一个数组对象。 因此,如果您知道您只收到了一个对象,只需将其封装在数组中即可:

View::make('index', array('alerts' => array($alert)));

但是,其他一些方法,如 Alert::all() 或其他方法可能已经返回了一个对象数组,因为您请求了其中的许多。在这种情况下,您不需要将其封装在数组中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 2021-09-24
    相关资源
    最近更新 更多