2016-08-30 32 views
2

我正在將Laravel從5.2升級到5.3,並且我的一個Blade視圖不再有效。我將一個數組傳遞給一個包含的視圖來遍歷它。我正在使用forelse指令,但它一直給我一個未定義的偏移量:1錯誤。Laravel Blade在forelse中失敗,在foreach中工作

這裏是控制器片段與視圖呼叫:

$transactions = $committees->transactions() 
    ->where('FiledDate', '<=', $to) // Upper date 
    ->where('FiledDate', '>=', $from) // Lower date 
    ->get(); 

return view('committees.show', 
    [ 
     'data' => $data, 
     'transactions' => $transactions, 
    ]); 

這裏是刀片文件。

<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

您是否嘗試過vardumping交易的內容?它可能沒有你在forelse循環中訪問的字段,從而導致錯誤。

嘗試在您的forelse循環中執行{{var_dump($ transaction)}},並確保您具有代碼中所訪問的所有字段。

+0

是的,我已經var_dumped了$交易變量。目前我已將代碼更改爲foreach,並測試了一個空變量。 – Mark

0

在控制器以這種方式創建$交易: $ transacrion不是數組: 使用此代碼:

$transaction = Transaction::all(); 
+0

我將模型調用添加到了我原來的問題中。真正使這種困難的是foreach循環工作得很好。 – Mark

0

這不是你的迭代失敗的執行,而是刀片模板的編制。差異對於調試問題至關重要。直到de 18th of September指令編譯forelse區分大小寫,這意味着當它試圖編譯你的語句時,它不能產生它需要的匹配來輸出你需要的實際PHP代碼。更新Laravel應該解決這個問題。

所以,澄清,這將打破:

@forelse ($transactions AS $transaction) 

雖然這會工作:

@forelse ($transactions as $transaction) 

話雖如此,我強烈建議你遵循PSR-2和寫入所有PHP keywords in lowercase

0

你只需要一個像我下面提到的更新您的@forelse部分:

@forelse ($transactions ? $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