Laravel接続(Join)

8867 ワード

ないぶせつぞく
$users = Book::join('auth','book.auth_id','auth.id')
			->select('book.*','auth.name as auth_name')
			->get()
			->toArray()

SQL文に変換:
select `bl_book`.*, `bl_auth`.`name` as `auth_name` from `bl_book` inner join `bl_auth` on `bl_book`.`auth_id` = `bl_auth`.`id`

左の接続
内部接続ではなく左接続を使用したい場合は、left joinと同様に使用できます.
$users = Book::leftJoin('auth','book.auth_id','auth.id')
			->select('book.*','auth.name as auth_name')
			->get()
			->toArray()

クロスコネクション
「クロスコネクション」を実行するには、joinメソッドを使用して、クロスコネクションしたいテーブル名をメソッドに渡すことができます.クロスコネクションは、最初のテーブルと接続されたテーブルの間にデカルト積を生成します.
$users = User::crossJoin('auth')
        	->get();

高度な接続文
さらに、より高度な接続句を指定して、crossJoinメソッドに2番目のパラメータとして閉パケットを渡すこともできます.この閉パケットは、joinオブジェクトを受信して、JoinClause句制約を指定します.
users  = Book::join('auth',function ($join){
                $join->on('book.auth_id','auth.id')
                    ->Where('book.id' , '>','3');
        })
        ->get()
        ->toArray();

ユニオン
クエリー・ビルダーでは、2つのクエリーを結合するショートカットも用意されています.たとえば、クエリーを作成してからunionメソッドを使用して2番目のクエリーと結合できます.
$user_name = User::select('name');  

$users = User::select('password')->union($user_name)->get(); 

注:joinメソッドも有効であり、unionAllの使用方法と同じです.