我正在将Laravel从5.2升级到5.3,并且我的一个Blade视图已不再有效。我将数组传递给包含的视图以循环它。我正在使用forelse
指令,但它一直给我一个未定义的偏移:1错误。
以下是带有视图调用的控制器代码段:
$transactions = $committees->transactions()
->where('FiledDate', '<=', $to) // Upper date
->where('FiledDate', '>=', $from) // Lower date
->get();
return view('committees.show',
[
'data' => $data,
'transactions' => $transactions,
]);
这是Blade文件。
<table class="table table-striped">
<thead>
<tr><th class="text-center" colspan="5">Transactions</th></tr>
<tr>
<th class="text-center">TranId</th>
<th class="text-center">Tran Date</th>
<th class="text-center">SubType</th>
<th class="text-center">Filed Date</th>
<th class="text-center">Amount</th>
</tr>
</thead>
<tbody>
@forelse ($transactions AS $transaction)
<tr>
<td class="text-center">{{ $transaction->TranId }}</td>
<td class="text-center">{{ $transaction->TranDate }}</td>
<td class="text-center">{{ $transaction->SubType }}</td>
<td class="text-center">{{ $transaction->FiledDate }}</td>
<td class="text-center">{{ number_format($transaction->Amount, 2, '.', ',') }}</td>
</tr>
@empty
<tr><td colspan="5">No Transactions</td></tr>
@endforelse
</tbody>
我创建了一个虚拟事务数组,但我仍然遇到了同样的错误。
此外,当我使用foreach
指令时,它工作正常,但我必须进行额外的检查以检查没有记录。
答案 0 :(得分:0)
你试过vardumping交易的内容吗?它可能没有您在forelse循环中访问的字段,从而导致错误。
尝试在您的forelse循环中执行{{var_dump($ transaction)}},并确保您在代码中拥有所有要访问的字段。
答案 1 :(得分:0)
在控制器中以这种方式创建$ transaction: $ transacrion not array: 使用此代码:
$transaction = Transaction::all();
答案 2 :(得分:0)
不是迭代的执行失败了,而是编译了Blade模板。这种差异对于调试问题至关重要。直到de 18th of September,forelse
指令的编译区分大小写,这意味着当它尝试编译语句时,它无法生成输出所需的实际PHP代码所需的匹配项。更新Laravel应解决问题。
因此,澄清一下,这会破坏:
@forelse ($transactions AS $transaction)
虽然这样可行:
@forelse ($transactions as $transaction)
话虽如此,我强烈建议您关注PSR-2并写下所有PHP keywords in lowercase 。
答案 3 :(得分:0)
您只需要像我在下面提到的那样更新您的@forelse部分:
close_date = DateField(input_formats=['%m/%d/%Y'], label=_('Installation Date'),widget=DateInput())