ドリリウム

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

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

勉強中の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();
}

▼IT系の転職なら

▼誰かにプログラミングを教えてみませんか?

にほんブログ村 釣りブログへ
にほんブログ村

▼釣り具の宅配買取なら