2016-10-12 6 views
0

다음 표가 포함 된 복잡한 설정이 있습니다.Laravel Eloquent multiple tables

Customers 
Transactions 
Jobs 
Rounds 
Job_Rounds 

연체 된 모든 고객을 출력하고 싶습니다. 나는 다음과 같은 쿼리를 사용하여 그 일을했습니다

큰되는 기한이 지난 모든 고객을 반환
$data = Auth::user()->clients()->leftjoin('transactions','clients.id','=','transactions.client_id') 
       ->select(DB::raw('sum(gross) as value, email, first_name, last_name, mobile, clients.id, addressline1')) 
       ->groupBy('id','first_name','last_name','email','mobile','addressline1', 'clients.id') 
       ->havingRaw('SUM(gross) < 0') 
       ->get(); 

는, 그러나 지금 회전에 의한 연체 고객을 필터링 할 수 있어야합니다. 내 컨트롤러에 주어진 라운드의 round_id을 통과 한 후 round_id을 기준으로 결과를 필터링하려고 할

Customers > Jobs.client_id 
Customers > Transactions.client_id 
Jobs > Rounds via Jobs_Rounds 

다음과 같이

나의 관계이다. 라운드 ID를 저장하는 유일한 곳은 jobs_rounds 테이블에 있으며이 테이블에는 job_id & round_id 만 포함되어 있습니다.

답변

0

나는 HasManyThrough 관계를 사용하여 CustomerRound을 연결하려고 생각하고 있습니다. 이 같은

뭔가 :

// Customer.php 
public function rounds() 
{ 
    return $this->hasManyThrough(Round::class, Job::class, 'client_id', 'job_id', 'id'); 
} 

그런 다음 컨트롤러에서 당신이 시도 할 수 :

이 가 가
$data = Auth::user()->clients() 
      ->whereHas('rounds', function ($query) { 
       $query->where('id', request()->input('round_id')) 
      }) 
      //... the rest of your filters 
가 시몬, 나는이 시도했습니다
+0

감사하지만 난 문제가있을 것 같다 .. 언제 return Client :: First() -> rounds 클라이언트 라운드를 예상했지만 오류가 발생했습니다. 열을 찾을 수 없습니다 : 1054 알 수없는 열 'rounds.job_id'- 라운드와 클라이언트 사이의 링크가 성공할 것입니다 .. Job 클라이언트에 연결된 작업은 job_rounds를 통해 라운드에 연결됩니다 –

+0

작업이 여러 r 일 수 있습니다 ounds 그러므로 job_rounds 테이블 :/ –

+0

'rounds' 테이블에'job_id'가없는 것 같습니다 – SimonDepelchin