我在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();
有没有办法实现这个目标?
答案 0 :(得分:1)
确定此类问题的问题是查询范围期望返回查询。当您运行->sum()
时,您实际上正在执行一种特殊的" aggregate"查询,因此无法将此类功能烘焙到查询范围中。
还值得一提的是,您只需使用一个查询即可轻松实现上述两个sum()
函数中的两个查询:
$profit = $user->sales()->latest()->sum(DB::raw('in - out'));