1. 選択
テーブル内のすべての行を取得します
$users = DB::table('users')->get(); foreach ($users as $user) { var_dump($user->name); }
テーブルから単一の行を取得します
$user = DB::table('users')->where('name', 'John')->first(); var_dump($user->name);
単一の列の行を取得します
$name = DB::table('users')->where('name', 'John')->pluck('name');
列の値のリストを取得します
$roles = DB::table('roles')->lists('title');
このメソッドは次の役割を返します配列ヘッダー。カスタム キー列を指定して配列を返すこともできます
$roles = DB::table('roles')->lists('title', 'name');
Select 句を指定する
$users = DB::table('users')->select('name', 'email')->get(); $users = DB::table('users')->distinct()->get(); $users = DB::table('users')->select('name as user_name')->get();
Select 句を既存のクエリに追加する $query = DB::table('users')->select ('name') ;
$users = $query->addSelect('age')->get();
where
$users = DB::table('users')->where('votes', '>', 100)->get();
OR
$users = DB::table('users')->where('votes', '>', 100)->orWhere('name', 'John')->get();
間の範囲
$users = DB::table('users')->whereBetween('votes', array(1, 100))->get();
中間でない範囲
$users = DB::table('users')->whereNotBetween('votes', array(1, 100))->get();
配列の範囲
$users = DB::table('users')->whereIn('id', array(1, 2, 3))->get(); $users = DB::table('users')->whereNotIn('id', array(1, 2, 3))->get();
Where Nullを使用して値が設定されていないレコードを検索する
$users = DB::table('users')->whereNull('updated_at')->get();
Order By、Group By、および2. 接続
結合
クエリ ビルダーを使用して、接続ステートメントを作成することもできます。次の例を見てください:
基本結合ステートメント
$users = DB::table('users')->orderBy('name', 'desc')->groupBy('count')->having('count', '>', 100)->get();
左結合ステートメント
$users = DB::table('users')->skip(10)->take(5)->get();
3. グループ化
場合によっては、「exists」やネストされたパラメーターのグループ化など、より高度な where 句の作成が必要になる場合があります。 Laravel クエリ ビルダーはこれらを処理できます:
DB::table('users') ->join('contacts', 'users.id', '=', 'contacts.user_id') ->join('orders', 'users.id', '=', 'orders.user_id') ->select('users.id', 'contacts.phone', 'orders.price') ->get();
上記のクエリは次の SQL を生成します:
DB::table('users') ->leftJoin('posts', 'users.id', '=', 'posts.user_id') ->get(); DB::table('users') ->join('contacts', function($join) { $join->on('users.id', '=', 'contacts.user_id')->orOn(...); }) ->get(); DB::table('users') ->join('contacts', function($join) { $join->on('users.id', '=', 'contacts.user_id') ->where('contacts.user_id', '>', 5); }) ->get();
上記のクエリは次の SQL を生成します:
DB::table('users') ->where('name', '=', 'John') ->orWhere(function($query) { $query->where('votes', '>', 100) ->where('title', '<>', 'Admin'); }) ->get();
IV. 集計
クエリ ビルダーは、次のようなさまざまな集計メソッドも提供します。統計、最大、最小、平均、合計。
集計メソッドの使用
select * from users where name = 'John' or (votes > 100 and title <> 'Admin') Exists Statements DB::table('users') ->whereExists(function($query) { $query->select(DB::raw(1)) ->from('orders') ->whereRaw('orders.user_id = users.id'); }) ->get();
生の式
生の式クエリを使用する必要がある場合があります。これらの式はクエリ文字列に挿入されるため、SQL インジェクション ポイントを作成しないように注意してください。生の式を作成するには、DB:rawmethod:
生の式の使用
select * from userswhere exists ( select 1 from orders where orders.user_id = users.id )
を使用して、列
$users = DB::table('users')->count(); $price = DB::table('orders')->max('price'); $price = DB::table('orders')->min('price'); $price = DB::table('orders')->avg('price'); $total = DB::table('users')->sum('votes');
更新する追加の列を指定することもできます:
$users = DB::table('users') ->select(DB::raw('count(*) as user_count, status')) ->where('status', '<>', 1) ->groupBy('status') ->get();
Inserts
テーブルにレコードを挿入します
DB::table('users')->increment('votes'); DB::table('users')->increment('votes', 5); DB::table('users')->decrement('votes'); DB::table('users')->decrement('votes', 5);
自動インクリメントIDを持つテーブルにレコードを挿入します
テーブルに自動インクリメントIDフィールドがある場合は、使用しますinsertGetId を使用してレコードを挿入し、ID を取得します :
DB::table('users')->increment('votes', 1, array('name' => 'John'));
注: PostgreSQL の insertGetId メソッドを使用する場合、自動インクリメント列の名前は「id」であることが想定されます。
テーブルに複数のレコードを挿入
DB::table('users')->insert( array('email' => 'john@example.com', 'votes' => 0) );
4. 更新
テーブル内のレコードを更新
$id = DB::table('users')->insertGetId( array('email' => 'john@example.com', 'votes' => 0) );
5. 削除
テーブル内のレコードを削除
DB::table('users')->insert(array( array('email' => 'taylor@example.com', 'votes' => 0), array('email' => 'dayle@example.com', 'votes' => 0), ));
テーブル内のすべてのレコードを削除
DB::table('users') ->where('id', 1) ->update(array('votes' => 1));
DB::table('users')->where('votes', '<', 100)->delete();
DB::table('users')->delete();
DB::table('users')->truncate();
$first = DB::table('users')->whereNull('first_name'); $users = DB::table('users')->whereNull('last_name')->union($first)->get();
DB::table('users')->where('votes', '>', 100)->sharedLock()->get();
DB::table('users')->where('votes', '>', 100)->lockForUpdate()->get();