2016-04-18 5 views
1

ich jetzt zu tun bin Tring ist eine viele zu viele Beziehung zwischen „Zahlungen“ Tabelle und „Rechnungen“ Tisch zu machen ... aber mein Problem ist, wenn ich versuche, ein hinzufügen neue Zahlungs und i wählen Rechnungen e Liste Laravel mich ist mein Code "der Versuch zu bekommen Eigentum von nicht-Objekt" in Zeile 217 ..Der Versuch, Eigentum von Nicht-Objekt zu erhalten - Laravel

ergibt dies:

$ selectedInvoices = $ input [ 'Rechnung'] ;

$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: wenn ich geben einen Betrag> Gesamtmenge an meine Rechnungen auch es funktioniert, wenn ich eine Menge < Gesamtmenge geben es auch funktioniert ..

+0

Was ist der Code auf der Leitung 217? Können Sie es in dem von Ihnen geposteten Code hervorheben? – Dwijen

+0

if ($ zahlung-> betrag <= $ totalAmount) { /* zeile 217 */while ($ zahlung-> betrag> = $ rechnungen-> last() -> balance) {..... –

+0

Prüfen deine '$ rechnungen-> last()' in dieser Zeile .. Offensichtlich existiert sie nicht, höchstwahrscheinlich aufgrund von herausspringenden Elementen. Außerdem verwenden Sie '-> all()' und '-> values ​​()' überall, aber diese Methoden geben etwas zurück, sie ändern die Sammlung selbst nicht. Anstatt foreach für den Gesamtbetrag zu verwenden, überprüfen Sie auch '-> sum ('balance)'. – Robert

Antwort

2

Schalter-Leitung 217

Von:

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

An:

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

Erläuterung: $invoices->pop() entfernt das letzte Element in der Auflistung. Wenn alle der Elemente aus der invoices Sammlung entfernt worden ist, wird kein invoice Objekt gefunden werden; Daher Der Versuch, die Eigenschaft von nicht-Objekt zu erhalten

+0

es mir die gleiche Ausnahme in diesem lineif gibt ($ Zahlung-> Menge < $invoices-> last() -> Balance) –

+0

Dank viel Sie mir geholfen;) –

+0

Gleiche wie vorher, fügen Sie einfach den COUNT (Rechnungen $) ':) – Mysteryos

Verwandte Themen