范围和“总和” - 查询?

时间:2015-04-08 20:03:06

标签: php laravel laravel-5

我在Laravel 5应用程序中多次使用相同的查询逻辑。我知道有一些范围可以轻松地重用这个逻辑。但这似乎不适用于求和查询。

public function scopeProfit($query)
{
    return $query -> sum('in') - $query -> sum('out');
}

在我的应用中,我有很多代码,比如

# 'latest' is a scope to filter sales of the last three months
$profit = $user -> sales() -> latest() -> sum('in') - $user -> sales() -> latest() -> sum('out');

这是我使用多行的较短行之一。这不是一个真正的问题,但我想缩短一些界限,比如:

$profit = $user -> sales() -> latest() -> profit();

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:1)

确定此类问题的问题是查询范围期望返回查询。当您运行->sum()时,您实际上正在执行一种特殊的" aggregate"查询,因此无法将此类功能烘焙到查询范围中。

还值得一提的是,您只需使用一个查询即可轻松实现上述两个sum()函数中的两个查询:

$profit = $user->sales()->latest()->sum(DB::raw('in - out'));