Laravel クエリビルダー チートシート

Laravel Laravel

Laravelのクエリビルダーは、SQLを直書きせずにデータベース操作を簡潔に記述できる強力な機能です。 このチートシートでは、よく使うクエリのパターンをサンプル付きで整理します。


✅ 基本的な取得

// 全件取得
$users = DB::table('users')->get();

// 1件取得(最初のレコード)
$user = DB::table('users')->first();

// ID指定で取得
$user = DB::table('users')->find(1);

// 条件付き取得
$users = DB::table('users')->where('active', 1)->get();

🔍 条件指定

// 複数条件
DB::table('users')->where('active', 1)->where('age', '>', 18)->get();

// OR条件
DB::table('users')->where('active', 1)->orWhere('role', 'admin')->get();

// IN句
DB::table('users')->whereIn('id', [1, 2, 3])->get();

// NULLチェック
DB::table('users')->whereNull('email_verified_at')->get();

📝 データの挿入・更新・削除

// レコード挿入
DB::table('users')->insert([
    'name' => 'John',
    'email' => 'john@example.com'
]);

// レコード更新
DB::table('users')->where('id', 1)->update(['name' => 'Jane']);

// レコード削除
DB::table('users')->where('id', 1)->delete();

🔄 ソート・制限・ページング

// ソート
DB::table('users')->orderBy('created_at', 'desc')->get();

// 件数制限
DB::table('users')->limit(10)->get();

// ページング
DB::table('users')->paginate(15); // Bladeで {{ $users->links() }} を使用

🔁 集計関数

DB::table('orders')->count();
DB::table('orders')->max('price');
DB::table('orders')->min('price');
DB::table('orders')->avg('price');
DB::table('orders')->sum('price');

🔗 テーブル結合

DB::table('users')
    ->join('posts', 'users.id', '=', 'posts.user_id')
    ->select('users.*', 'posts.title')
    ->get();

// 左外部結合
DB::table('users')
    ->leftJoin('posts', 'users.id', '=', 'posts.user_id')
    ->get();

🧠 サブクエリ

$latestPosts = DB::table('posts')
    ->select('user_id', DB::raw('MAX(created_at) as last_post'))
    ->groupBy('user_id');

DB::table('users')
    ->joinSub($latestPosts, 'latest', function ($join) {
        $join->on('users.id', '=', 'latest.user_id');
    })
    ->get();

📦 トランザクション

DB::transaction(function () {
    DB::table('users')->update(['active' => false]);
    DB::table('logs')->insert(['action' => 'deactivated users']);
});

🧪 生SQLを使いたいとき

$results = DB::select('SELECT * FROM users WHERE active = ?', [1]);

🎯 よくあるTips

  • pluck('name'): 特定カラムの配列を取得
  • value('email'): 単一値を取得
  • exists() / doesntExist(): 存在確認
if (DB::table('users')->where('email', 'test@example.com')->exists()) {
    // 存在する場合の処理
}

🧭 まとめ

Laravelのクエリビルダーは、読みやすく保守性の高いコードを書くための強力なツールです。 このチートシートを手元に置いておけば、日常的な開発作業がスムーズになるでしょう。

必要に応じてEloquentとの比較記事や、より高度なユースケース(例:CTE、ウィンドウ関数など)への発展も検討してください。

コメント

タイトルとURLをコピーしました