2017-06-12 215 views
1

我試圖使用Laravel查詢生成器獲得兩個不同列的總和,下面的普通SQL查詢工作得很好,但我無法讓它與Laravel Query一起工作。如何使用Laravel Query Builder獲取兩個不同列的總和?

SELECT SUM(logins_sun + logins_mon) FROM users_stats WHERE id = 7; // returns: 1034 

這是我的嘗試。

$stats = DB::table('users_stats')->where('id', '=', '7')->sum('logins_sun', '+', 'logins_mon'); // returns: 587.0 

這裏是我的數據庫結構。

+----+------------+------------+ 
| id | logins_sun | logins_mon | 
+----+------------+------------+ 
| 7 |  587 |  447 | 
+----+------------+------------+ 

它應該返回但Laravel查詢只返回一個值587.0

我該如何得到它的工作?

回答

0

嘗試傳遞一個回調的總和()和做另外還有像:

$stats = DB::table('users_stats')->where('id', '=', '7')->sum(function ($row) { 
    return $row->logins_sun + $row->logins_mon; 
}); 
2

sum是一個聚合函數,只需要一個參數。它會將列中每一行的值相加。在你的情況下,查詢只返回一行,所以總和就是那一列的值(第一個參數傳遞給sum())。可能有一些更好的方法來做到這一點,但我認爲你應該可以使用原始表達式來返回兩列的總和。

$stats = DB::table('users_stats') 
      ->select(DB::raw('logins_sun + logins_mon')) 
      ->where('id', '=', '7'); 
0

您可以通過以下方式運行laravel直接原始的SQL:

DB ::表( 'users_stats':

$sql = "SELECT SUM(logins_sun + logins_mon) FROM users_stats WHERE id = :ID"; 

$result = DB::select($sql,['ID'=>7]); 
0

你可以像總和()方法嘗試) - > where('id','7') - > sum(DB :: raw('logins_sun + logins_mon'));

相關問題