Laravel

【Laravel】クエリビルダー(DBファザード)

Laravelでは、データベースからデータを取得する方法として大きく2つあります。

  1. DBファザードを使ってSQLを作成し取得する方法
  2. オブジェクトリレーショナルマッパー(ORM)であるEloquent(エロクエント)を使って取得する方法

今回は「①のDBファザード」の使い方について説明します。基本的な使い方は「②のEloquent」を使った方法と同じになります。

基本

基本的な流れ

tableメソッドでベースとなるテーブルを定義

whereメソッドやorderbyメソッドでクエリを作成

getメソッドで作成したクエリのデータを取得する。

table メソッド

<?php

use Illuminate\Support\Facades\DB;

$query = DB::table('users');

dump($query);
// 出力値(生成されるSQL文)
"select * from `company_users`"

データ取得

get メソッド

Illuminate\Support\Collectionクラスで結果を取得できる。

$users = DB::table('users')->get();

// SQL
"select * from `company_users`"

first メソッド

stdClass クラスで取得できます。

動的なプロパティが使える、汎用的な空のクラスです。

https://www.php.net/manual/ja/class.stdclass.php
$user = DB::table('users')->first();

検索、条件

where メソッド

完全一致

$query->where('name','Eula Cole');

$query->where('name','=','Eula Cole');

一致しない

$query->where('name','<>','Eula Cole');

$query->whereNot('name','Eula Cole');

含む

// 「E」という文字列を含む
$query->where('name','LIKE','%E%');

前方一致

// 「P〜」 Pで始まる文字列に一致するもの
$query->where('name','LIKE','P%');

後方一致

// 「〜le」 leで終わる文字列に一致するもの
$query->where('name','LIKE','%le');

orWhere メソッド

〇〇 か △△に一致するものみたいな形で検索できます。

orWhereメソッドだけでは、whereメソッドと同様になります。

orによる検索なので2つ以上の条件が必要になります。

// ageが60に一致する
$query->where('age',60);

// 上記(ageが60に一致する)条件 か  leで終わる文字列に一致するもの
$query->orWhere('name','LIKE','%le');

whereIn

// ageが20か40か60に一致する
$query->whereIn('age',[20,40,60]);

notWhereIn

// ageが20か40か60に一致しないもの
$query->whereIn('age',[20,40,60]);

並び替え

orderby メソッド

// 昇順 1,2,3...
$query->orderBy('id', 'asc');

// 降順 10,9,8....
$query->orderBy('id', 'desc');

集計

count メソッド

// 
$count  = $query->count();

sum メソッド

// ageカラムの合計値
$sum  = $query->sum('age');

avg メソッド

// ageカラムの平均値
$avg  = $query->avg('age');

minメソッド

// ageカラムの最小値
$min  = $query->min('age');

maxメソッド

// ageカラムの最大値
$max = $query->max('age');

取得数

limitメソッド

// 5個まで取得
$users = $query->limit(5)->get();

offsetメソッド

// 2番目(0が1番目)から5個まで取得
$users = $query->offset(1)->limit(5)->get();