■前提条件
makers(メーカー)テーブル
・id
notices(メーカー通知)テーブル
・id
・maker_id
単純な内部結合
$makers = Maker::join('notices as n', 'makers.id', '=', 'n.maker_id')
->get();
外部結合
$makers = Maker::leftJoin('notices as n', 'makers.id', '=', 'n.maker_id')
->get();
結合先のテーブル(notices)に条件がある場合
$makers = Maker::from('makers as m')
->leftJoin('notices as n', function($join){
$join->on('m.id', '=', 'n.maker_id')
->where('n.is_read', '=', 1);
})
->get();
leftJoinSubを使うケース
// 結合先のテーブル(notices)に条件
$q = Notice::from('notices as n')
->select(
'maker_id'
)
->where('n.is_read', '=', 1)
->where('n.start_date', '<=', date('Y.m.d'));
// 更に結合先テーブル(notices)にor条件
$notices = $q->where(function($q){
$q->WhereNull('n.end_date')
->orWhere('n.end_date', '>=', date('Y.m.d'));
});
// 結合先テーブル(notices)をサブクエリ
$makers = Maker::from('makers as m')
->select(
'm.id',
'm.name',
)
->leftJoinSub($notices, 'n', 'm.id', '=', 'n.maker_id')
->get();