【问题标题】:Trying to get property of non-object - laravel试图获取非对象的属性 - laravel
【发布时间】:2016-04-18 09:29:25
【问题描述】:

我现在要做的是在“付款”表和“发票”表之间建立多对多关系......但我的问题是当我尝试添加新付款并选择发票 laravel 列表时在第 217 行给我“尝试获取非对象的属性”..

这是我的代码:

$selectedInvoices = $input['invoice'];

    $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) ;
        }
    }

p.s:当我给出一个金额 > 我的发票总金额时,它也可以在我给出一个金额

【问题讨论】:

  • 第 217 行的代码是什么?您可以在您发布的代码中突出显示它吗?
  • if($payment->amount amount >= $invoices->last()->balance){.. ...
  • 在该行检查您的$invoices-&gt;last()。显然它不存在,很可能是因为弹出项目。除此之外,您到处都在使用-&gt;all() 和-&gt;values(),但是这些方法会返回一些东西,它们不会更改集合本身。也不要为总量检查-&gt;sum('balance)。

标签: laravel


【解决方案1】:

切换217行

发件人:

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

收件人:

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

解释:$invoices-&gt;pop() 正在删除集合中的最后一项。当所有项目都从invoices 集合中删除时,将找不到invoice 对象;因此,试图获取非对象的属性

【讨论】:

  • 这行给了我同样的例外 if ($payment->amount last()->balance)
  • 和以前一样,只是添加count($invoices) :)
猜你喜欢
  • 2015-09-22
  • 2017-03-20
  • 2014-03-25
  • 2015-01-25
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多