ドリリウム

趣味をとことん突き詰めるブログ。高知 / 釣り / DIY / バイク / 車 / 家具制作 / アクアリウム / BMW / 地方移住 / ルノー・ルーテシア

【Laravel/Eloquent入門】テーブルを結合してデータを取り出す

ドリリウムは移転しました。

約5秒後に自動的にリダイレクトします。

勉強中のLaravelで内部結合(inner join)をするときにちょっと困ったので備忘録。

 

実際にはもっと長くてごちゃごちゃしていますが、以下のような結合をしたかった。

select 
a.id, a.name, b.result
from
atable as a
inner join btable as b on a.code = b.code
where
a.code = 1 and b.result > 2

入門書片手に勉強しているだけなので、こうしてモデル内にメソッドとして定義すべきなのかコントローラー側でwhereとかjoinとか書くべきなのかわからない。

こうしてモデル内に書いておいた方が個人的には見やすくて好きだからこうしています。

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;

class Location extends Model
{
protected $table = 'atable';
public $timestamps = false;

public function getData(){
return DB::table($this->table)
->join('btable as b', 'atable.code', '=', 'b.code')
->where('atable.code', '1')
->where('b.result', '>', '2')
->select('atable.id', 'atable.name', 'b.result')
->get();
}
}

やっていることは全く同じだけどこういう風にも書ける。

こっちの方が元のクエリっぽい。

public function getData(){
return DB::table('atable as a')
->join('btable as b', 'a.code', '=', 'b.code')
->where('a.code', '1')
->where('b.result', '>', '2')
->select('a.id', 'a.name', 'b.result')
->get();
}

ブログを書いている人

カタミチ

ご意見・お問い合わせ等:syufukc@gmail.com

プライバシーポリシーおよび広告掲載等に関する表示事項