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 ..
Was ist der Code auf der Leitung 217? Können Sie es in dem von Ihnen geposteten Code hervorheben? – Dwijen
if ($ zahlung-> betrag <= $ totalAmount) { /* zeile 217 */while ($ zahlung-> betrag> = $ rechnungen-> last() -> balance) {..... –
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