Laravel关系之和

问题描述 投票:0回答:4

我想从我的付款表中返回“金额”之和。一张发票可以有很多付款。下面的“-> sum('amount')无效,返回:

在非对象上调用成员函数addEagerConstraints()。

如何退还我关系中每张发票的所有付款之和?

发票型号:

class Invoices extends Eloquent {

    public function payments()
    {
        return $this->hasMany('Payments')->sum('amount');
    }
}

费用模式:

class Payments extends Eloquent {

    public function invoices()
    {
        return $this->belongsTo('Invoices');
    } 
}

我的表“ payments”保存我的表发票的外键,即invoices_id。

laravel laravel-4 sum relation
4个回答
3
投票
class Invoices extends Eloquent {

    public function payments()
    {
        return $this->hasMany('Payments');
    }
}

class Payments extends Eloquent {

    public function invoices()
    {
        return $this->belongsTo('Invoices');
    } 
}

在您的控制器中

Invoice::with(['payments' => function($query){
   $query->sum('amount');
}])->get();

;


1
投票

我在here中找到了一种简单的方法来完成此操作,可以使用withPivot()方法。

您可以重新定义与以下内容的关系

public function expenses()
{
    return $this->belongsToMany('Expenses', 'invoices_expenses')
                   ->withPivot('name', 'amount', 'date');
} 

1
投票

首先确定哪个发票(例如ID 1)

$invoice = Invoices::find(1);

然后急于加载所有相应的付款

$eagerload = $invoice->payments;

最后假设您的发票模型中有amount字段,您可以使用以下方法简单地找到总和:

$totalsum = $eagerload->sum('amount');

0
投票

您可以显示此package

$invoices = Invoices::withSum('payments:amount')->get();
© www.soinside.com 2019 - 2024. All rights reserved.