【Laravel】クエリビルダによるSQLのjoinやエイリアスなど

こんにちは。

今日は備忘録がてら、
クエリビルダを使用したSQLとして、
初級段階で悩みやすい内容を、
ザックリまとめた形で備忘録として残しておきます。
ちなみに、Laravel5.5です。

 

コードはこちら

実際のクエリビルダにかいた内容がコチラ。
// ログインユーザ情報取得
$user = \Auth::user();

//データベースからレコードを配列で取得(Projectテーブル、Entryテーブル)
$data['collections']=DB::table(‘project’)
->join(‘entry’, ‘project.project_id’, ‘=’, ‘entry.project_id’)
->join(‘status as Status1′, function($join)
{
$join->on(‘project.project_status_cd’, ‘=’, ‘Status1.status_cd’)
->where(‘Status1.code’, ‘=’, 1); // 1:プロジェクト状況
})
->join(‘status as Status2′, function($join)
{
$join->on(‘entry.entry_status_cd’, ‘=’, ‘Status2.status_cd’)
->where(‘Status2.code’, ‘=’, 2); // 2:応募状況
})
->select(‘project.project_id’
,’project.project_name’
, DB::raw(” Status1.status_name as status_name1″)
, DB::raw(” Status2.status_name as status_name2″)
, ‘entry.*’
)
->where(‘entry.user_id’, ‘=’, $user->user_id)
->orderBy(‘project.project_id’, ‘DESC’)

 

ざっくり解説

ほな、ざっくり説明していきます。
// ログインユーザ情報取得
$user = \Auth::user();

 

Laravelで使用するuserテーブルのログインユーザの情報を使いたいときは、
上記の書き方で行けます。
->join(‘entry’, ‘project.project_id’, ‘=’, ‘entry.project_id’)

こちらのjoinはInner joinです。
通常の1つの項目で結合するタイプの簡単な書き方です。
->join(‘status as Status1′, function($join)
{
$join->on(‘project.project_status_cd’, ‘=’, ‘Status1.status_cd’)
->where(‘Status1.code’, ‘=’, 1); // 1:プロジェクト状況
})

こっちは複数項目に対してInner joinする際の書き方。
テーブルにはエイリアスで別名を付けています。

また、結合条件は1つで、残りはテーブルに対してのWhere条件として書いています。
where code = 1 っていう感じです。※例として「1」とかにしています。
, DB::raw(” Status2.status_name as status_name2″)

こちらは、SQLの文をそのまま書ける構文。
Case文を書きたい場合や、ストアドファンクションを呼び出したい場合にも使えます。
今回、エイリアスを着けるためにわざわざ書いていますが、
普通に

,’project.project_name as pj_name’

とかでもOKらしいです。。。
そうなんだ。。。笑

 

 

->where(‘entry.user_id’, ‘=’, $user->user_id)

続いて、こちらは通常のWhere句の書き方
->orderBy(‘project.project_id’, ‘DESC’)

最後は、Order by句を書きました。
Descは降順です。
昇順の場合は、Ascで!

以上です。

少しでも参考になれば、幸いです。

コメントを残す

サブコンテンツ

このページの先頭へ