2016-10-12 10 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() - >ラウンドクライアントがラウンドするのを見たが、エラーが出る:列が見つからない:1054不明な列 'rounds.job_id' - ラウンドとクライアントの間のリンクがスルー.. Jobクライアントにリンクされているジョブは、job_rounds経由でラウンドにリンクされています –

+0

ジョブは多数のrしたがって、job_roundsテーブル:/ –

+0

あなたの 'rounds'テーブルに' job_id'がないようです – SimonDepelchin