我试图将全局(警报)全局循环到我的视图中。
所以我想在我看来做这样的事情:
@foreach($alert as $alert)
<div class="alert alert-{{ $alert->type }}" role="alert">{{ $alert->message }}</div>
@endforeach
但是,当我在BaseController
:
public function __construct() {
$get_alerts = Alert::orderBy('id', 'DESC')->whereNull('deleted_at')->get();
foreach ($get_alerts as $alert) {
//make an array object of the alerts
$alert = array();
}
return View::share('alert', $alert);
}
我{{ dd($alert) }}
然后我得到了这个输出:array(0) { }
什么不是我想要的......
如何以干净和良好的方式解决这个问题?
最诚挚的问候,
罗宾
答案 0 :(得分:3)
您的代码存在一些问题。这条线是最重要的:
$alert = array();
你在这里说的是&#34;对于$get_alerts
中的每个结果,将$alert
设置为空数组&#34;。这就是为什么你得到输出array(0) { }
- 它是一个空数组。
另一个更大的问题是这一行:
@foreach($alert as $alert)
你应该在这里使用两个不同的变量名,因为循环的每次迭代都会为$alert
赋予一些东西,如果它们被命名为相同,它将覆盖第一个数组。典型而简单的解决方法就是:
@foreach($alerts as $alert)
现在他们不会互相覆盖。
你也有这部分方法链接:->whereNull('deleted_at')
。如果您使用软删除,实际上您不必这样做,因为Laravel会自动为您删除(&#34;删除&#34;)项目。 (但如果你不使用软删除,你可以忽略这一段。)
Blade&#39; @foreach
实际上是开箱即用的Eloquent系列。所以你的代码可以清理很多,比如:
public function __construct() {
$alerts = Alert::orderBy('id', 'DESC')->whereNull('deleted_at')->get();
return View::share('alerts', $alerts);
}
[...]
@foreach($alerts as $alert)
<div class="alert alert-{{ $alert->type }}" role="alert">{{ $alert->message }}</div>
@endforeach