2016-04-18 7 views
1

私は現在、 "支払い"テーブルと "請求書"テーブルの間に多くの関係をたくさん作ることをやっています...しかし、私の問題は、新しい支払いと私は私がライン217で「非オブジェクトのプロパティを取得しようとすると、」与えlaravel請求書の電子リストを選択...非オブジェクトのプロパティを取得しようとしています - ラベラー

が、これは私のコードです:

$ selectedInvoices = $入力[「請求書」] ;

$invoices = collect([]); 
    foreach ($selectedInvoices as $invoice) { 
     $invoices = $invoices->merge([Invoice::find(Invoice::getPrivateId($invoice))]); 
    } 
    $invoices->all(); 

    $invoices = $invoices->sortByDesc(function($invoice) 
    { 
     return $invoice->invoice_date; 
    }); 
    $invoices->values()->all(); 

    $totalAmount = 0; 

    foreach ($invoices as $invoice) 
    { 
     $totalAmount = $totalAmount + $invoice->balance; 
    } 

    if($payment->amount > $totalAmount){ 
     foreach ($invoices as $invoice){ 
      $adjustment = $invoice->balance * -1; 
      $partial = max(0, $invoice->partial - 0); 
      $invoice->updateBalances($adjustment, $partial); 
      $invoice->updatePaidStatus(); 
      $payment->invoices()->attach($invoice->id) ; 
     } 
     $credit = Credit::createNew(); 
     $credit->client_id = $clientId; 
     $credit->amount = $payment->amount - $totalAmount ; 
     $credit->balance = $payment->amount - $totalAmount ; 
     $credit->credit_date = $payment->payment_date; 
     $credit->private_notes = 'Crédit créé automatiquement suite au payement '.$payment->id. 
     ' avec un montant de '.$payment->amount.' à la date de '.$payment->payment_date; 
     $credit->save(); 
    } 

    if($payment->amount <= $totalAmount) 
    { 
     /*line 217*/ while ($payment->amount >= $invoices->last()->balance){ 
      $payment->amount = $payment->amount - $invoices->last()->balance ; 

      $adjustment = $invoices->last()->balance * -1; 
      $partial = max(0, $invoices->last()->partial - 0); 
      $invoices->last()->updateBalances($adjustment, $partial); 
      $invoices->last()->updatePaidStatus(); 

      $payment->invoices()->attach($invoices->last()->id) ; 

      $invoices->pop(); 
      $invoices->all(); 
      } 

     if ($payment->amount < $invoices->last()->balance){ 
      $adjustment = $payment->amount * -1; 
      $partial = max(0, $invoices->last()->partial - $payment->amount); 

      $invoices->last()->updateBalances($adjustment, $partial); 
      $invoices->last()->updatePaidStatus(); 
      $payment->invoices()->attach($invoices->last()->id) ; 
     } 
    } 

PS:私は量を与える>私は額にそれはあまりにも動作します<総量を与えるとき、それはまた、働く私の請求書の合計金額...

+0

217行目のコードは何ですか?あなたが投稿したコードでそれを強調表示できますか? – Dwijen

+0

if($ payment-> amount <= $ totalAmount) { /* line 217 */while($ payment-> amount> = $請求書 - > last() - > balance){..... –

+0

Checkあなたの '$ invoices-> last()'はその行にあります。明らかに、それは存在しません。それ以外に、 ' - > all()'と ' - > values()'を使用していますが、それらのメソッドは何かを返します。コレクション自体は変更されません。また、foreachを行う代わりに ' - > sum( 'balance)'をチェックしてください。 – Robert

答えて

2

スイッチ線217

から:

while ($payment->amount >= $invoices->last()->balance){ 

へ:

while (count($invoices) && $payment->amount >= $invoices->last()->balance) { 

説明:$invoices->pop()は、コレクションの最後のアイテムを削除しています。すべてのアイテムがinvoicesコレクションから削除された場合、invoiceオブジェクトは見つかりません。したがって、非オブジェクトのプロパティを取得しようとしています

+0

これは私にこの例外を与えてくれます($ payment-> amount < $invoices-> last() - > balance) –

+0

ありがとうございました;) –

+0

前と同じですが、 'count($ invoices)'を追加してください:) – Mysteryos

関連する問題