2016-08-30 4 views
2

Laravel을 5.2에서 5.3으로 업그레이드했으며 블레이드보기 중 하나가 더 이상 작동하지 않습니다. 포함 된 뷰에 배열을 전달하여 루프를 반복합니다. 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

거래 내용을 검토해 보셨습니까? 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 
관련 문제