2017-01-27 6 views
0

내 postgresql 데이터베이스는 이와 같습니다.Laravel5에서 SUM 배열을 가져 오는 방법은 무엇입니까?

SELECT * FROM point_records; 

id | user_id | point |  created_at  |  updated_at 
----+---------+-------+---------------------+--------------------- 
    1 |  1 | 100 | 2017-01-27 09:39:47 | 2017-01-27 09:39:47 
    3 |  2 | 100 |      | 
    4 |  2 | 100 |      | 
    5 |  3 | 100 |      | 
    6 |  3 | 100 |      | 
    7 |  3 | 100 |      | 

SELECT user_id, SUM(point) AS points FROM point_records GROUP BY(user_id) ORDER BY points desc; 

user_id | points 
---------+-------- 
     3 | 300 
     2 | 200 
     1 | 100 

나는 포인트 배열을 얻고 싶다. 그래서 지금 나는 이것을한다.

$points = \App\PointRecord::selectRaw('member_id, SUM(point) AS points') -> groupBy('member_id') -> orderBy('points', 'desc') -> get() -> toArray(); 

$your_score = array_search($user -> id, $points) + 1; 

이 $ 포인트 배열이이를 반환합니다.

Array ([0] => Array ([user_id] => 3 [points] => 150) [1] => Array ([user_id] => 2 [points] => 100) [2] => Array ([user_id] => 1 [points] => 10)) 

하지만 원시는 사용하고 싶지 않습니다. 나는 다른 아이디어를 찾고 있습니다.

누구든지 알고 계십니까?

답변

0

여러분의 솔루션은 이미 원시를 다른 것으로 변경하려는 이유 때문에 효과가 있다고 생각합니다. 당신이 정말로 당신이 더 많은 코드를 추가 할 필요가 변경하려는 경우 어쨌든이

$outputs = []; 
    $query = \App\PointRecord:::groupBy('member_id')->get(); 
    foreach ($query as $e) { 
     $data = $e->toArray(); 
     $data['point'] = $e->where('member_id', $data["member_id"])->sum('point'); 
     $outputs[] = $data; 
    } 
    dd($outputs); 
+0

흠 ... 합계 (점) 반환 정수를 시도하지만 GROUPBY는에 호출 할 수 없습니다. 하지만 난 몰라 addSelect 고마워. 감사합니다. – qwe001

+0

. 와우, 복잡하게 들리네. 나는 원료를 사용한다. 왜 내가 원시, 사촌을 언젠가 postgres에서 MySQL로 DB를 변경하면 일하는 것을 멈출 것을 두려워하고, 원한다면 변경하고 싶다. 그리고 SQL 주입의 위험에 처한 원인. 내가 원하면 원시를 사용하고 싶지 않아. – qwe001