Laravel 全局循环
Laravel global loop
我正在尝试将某些内容(警报)全局循环到我的视图中。
所以在我看来我想做这样的事情:
@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) { }
什么不是我想要的...
我怎样才能干净利落地解决这个问题?
最诚挚的问候,
罗宾
您的代码存在一些问题。这一行是最重要的:
$alert = array();
你在这里说的是"for every result in $get_alerts
, set $alert
to an empty array"。这就是为什么你得到输出 array(0) { }
- 它是一个空数组。
另一个更大的问题是这一行:
@foreach($alert as $alert)
你应该在这里使用两个不同的变量名,因为循环的每次迭代都会为 $alert
赋值,如果它们的名称相同,它将覆盖第一个数组。典型且简单的修复方法就是:
@foreach($alerts as $alert)
现在他们不会互相覆盖。
您也有这部分方法链接:->whereNull('deleted_at')
。如果您使用软删除,实际上您不必这样做,因为 Laravel 会自动为您整理已删除 ("trashed") 的项目。 (但如果你不使用软删除,这段可以忽略。)
Blade 的 @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
我正在尝试将某些内容(警报)全局循环到我的视图中。
所以在我看来我想做这样的事情:
@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) { }
什么不是我想要的...
我怎样才能干净利落地解决这个问题?
最诚挚的问候,
罗宾
您的代码存在一些问题。这一行是最重要的:
$alert = array();
你在这里说的是"for every result in $get_alerts
, set $alert
to an empty array"。这就是为什么你得到输出 array(0) { }
- 它是一个空数组。
另一个更大的问题是这一行:
@foreach($alert as $alert)
你应该在这里使用两个不同的变量名,因为循环的每次迭代都会为 $alert
赋值,如果它们的名称相同,它将覆盖第一个数组。典型且简单的修复方法就是:
@foreach($alerts as $alert)
现在他们不会互相覆盖。
您也有这部分方法链接:->whereNull('deleted_at')
。如果您使用软删除,实际上您不必这样做,因为 Laravel 会自动为您整理已删除 ("trashed") 的项目。 (但如果你不使用软删除,这段可以忽略。)
Blade 的 @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