2016-08-11 12 views
0

私はtablebと呼ばれる別のテーブルを持っており、user_idフィールドで定義されたユーザー関係を持っています。Laravel Eloquentクエリは別のモデルからユーザーを取得します

特定の日付が特定の範囲内にあるテーブルbに対してクエリを実行したいが、その行に関連付けられたユーザーテーブルを取得したいが、まだ把握されていないユーザーのみを取得したい。私は1 DBクエリでこれをすべて実行しようとしています。私はそれのほとんどを行っているが、私はそれのユニークな部分に問題があります。

は、ここで私が今持っているものです。

$tableB = TableB::select('users.*') 
    ->join('users', 'tableb.user_id', '=', 'users.id') 
    ->where('tableb.start_date', '>', date('Y-m-d')) 
    ->get(); 

だから今私は、同じユーザーからTABLEB中3つのエントリがあり、理想的に私はそのユーザーの1つのエントリを取得したいのですが。

どうすればいいですか?

+0

このコードを試してみてください。 :) –

+0

sqlfiddle.comのサンプルデータを追加して、モデルファイルも追加してください。 – motto

答えて

3

あなたはユーザーのみデータを選択しているので、ちょうどあなたのクエリでgroupBy句を追加します。

$tableB = TableB::select('users.*') 
    ->join('users', 'tableb.user_id', '=', 'users.id') 
    ->where('tableb.start_date', '>', date('Y-m-d')) 
    ->groupBy('users.id') 
    ->get(); 
1

あなたはちょうどこのようgroupByを追加する必要があります

$tableB = TableB::select('users.*') 
    ->join('users', 'tableb.user_id', '=', 'users.id') 
    ->where('tableb.start_date', '>', date('Y-m-d')) 
    ->groupBy('users.id') 
    ->get 
0

`GROUPBY( 'users.idを')`を追加

App/user.php 

public function getrelation(){  
     return $this->hasMany('App\tableB', 'user_id'); 
} 
コントローラ内で

Controller.php 

use App/user; 

public funtion filterByDate(user $user) 
{ 
    $date = '2016-02-01'; 
    $result = $user->WhereHas('getrelation', function ($query) use($date) { 
            $query->whereDate('tableb.start_date', '>', $date) 
              ->first(); 
         });  
} 
関連する問題