2017-01-20 13 views
0

"candidateviews"テーブルから各candidate_idの最新のレコードを取得しようとしています。Laravel 5.3クエリ - 一部のテーブルを左に結合する

これは私がachiveしたいものです。 enter image description here

私はlaravelに雄弁を使用していますし、すでに(とと説得力なし)この方法を試してみました:

$candidates = DB::table('interviews')->select('interviews.*', 'i2.*') 
->leftJoin('interviews as i2', 
    function ($join) { 
     $join->on('interviews.candidate_id', '=', 'i2.candidate_id'); 
     $join->on('interviews.created_at', '<', 'i2.created_at'); 
    } 
) 
->whereNull('i2.candidate_id') 
->get(); 

と雄弁と私は」試してみましたveはこの:私は、私はまったく同じクエリTHAを持ってget()toSql()に変更した場合は

$candidates = Interview::leftJoin('interviews as i2', 
    function ($join) { 
     $join->on('interviews.candidate_id', '=', 'i2.candidate_id'); 
     $join->on('interviews.created_at', '<', 'i2.created_at'); 
    } 
)->whereNull('i2.candidate_id') 
->get(); 

tは上記の画像に表示されていますが、laravel上で実行されています。これらの結果は常に得られます(クエリビルダーを使用した最初の方法を使用しています)。 enter image description here

誰でもこの結果が得られます。私はHeidiSqlで行うのと同じクエリをやっていることlaravelを理解するのは難しいですが、私は事前にdiferent結果:(

どれ先端?

感謝を入手!

答えて

1

あなたは->whereNull('i2.candidate_id')と組み合わせる->select('interviews.*', 'i2.*')を使用しているため私は第2の選択パラメータはnullsでインタビューテーブルのすべてのフィールドを上書きされ、->select('i2.*','interviews.*')か全くi2.*を使用する順序を逆にしてみてくださいと仮定しています。

出力はアルを無視するためです返されたコレクションの要素キーとしてfieldnameのみを使用します。

希望します。

完全なケースのシナリオでは、それぞれの結合されたテーブルから、たとえば次のようになります。table1.id,table1.column1,table1.column2,table2.column2 as smth_so_it_doesnt_override

+1

ありがとうございました!出来た :) – lmarcelocc

関連する問題