2016-06-13 3 views
0

현재이 문제로 머리를 긁적니다.Laravel hasOne + group_by, sum sum

내가 가지고있는 것.

$entries = Meta::whereIn('settlement_id', [1])->groupBy('client_id')->get();

Meta::model()Sport 테이블 내 예제에서 다른 테이블과 hasOne의 관계를 가지고 있습니다. 배열에서 하나의 속성을 사용하면 원하는 것을 얻을 수 있습니다.

루프에서 나는 내 필드를 사용할 수 있습니다 $entry->Sport->amount 이것은 완벽하게 작동합니다.

내가 필요한 것. 나는 여러 아이디의 내 배열을 확장 할 때

$entries = Meta::whereIn('settlement_id', [1,2,3])->groupBy('client_id')->get();

지금, 나는 $entry->Sport->amount 모든 아이디의의 합계를 반환 기대합니다. 그러나 그렇지 않습니다.

내가 뭘 잘못하고 있는지 알 수 없습니다.

모든 도움을 주실 수 있습니다.

+0

당신은 * *이 순간에 돌아가 무엇을, 그것이 합 모든 ID를 반환 할 것으로 예상 말할? – ntzm

+0

모든 필드의 합계가 아닌 첫 번째 레코드의 값을 반환합니다. – DavidCandreva

답변

0

귀하의 hasOne의 관계는 각 메타은 그래서 당신은 루프 $entries$entry->Sport 현재 메타에 관한 이 때, 별도의 스포츠있을 것이라는 점을 의미한다, 그들 모두이 아니 합.

당신이이 스포츠 모델에서 쿼리를 만들기 위해 더 쉬울 수 있습니다 s의 특정 메타에 대한 스포츠 금액의 합계를 원한다면,이 같은 (나는 당신의 관계가 얼마나 모른다 설치 그래서 이것은) 그냥 예입니다

Sport::whereIn('meta_id', [1,2,3])->sum('amount');

0

그게 올바른, 내가 이것을 달성 할 수있는 방법은 무엇입니까? hasOne을 다른 것으로 변경하면됩니까?

각 관련 메타 테이블을 쿼리하고 싶지 않습니다.

public function Sport() { return $this->hasOne('App\Sport', 'settlement_meta_id'); }

내 데이터베이스 테이블 스포츠는 다음과 같습니다

protected $fillable = [ 'settlement_meta_id', 'bet', 'payout' ];