2016-08-30 6 views
2

私はLaravelを5.2から5.3にアップグレードしています。私のブレードビューの1つはもはや動作していません。私はそれをループするために、配列を配列に渡しています。私は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

それが失敗したあなたの反復の実行ではなく、ご使用のブレード・テンプレートのコンパイルではないのですが。その違いは、問題をデバッグするために重要です。 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 
関連する問題