【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();
}