クエリービルダーついて

2018/10/12

mainvisual

これからLaravelでWEBアプリを作っていくのであればDBの扱いに慣れておかなければなりません。

DBのテーブルを上手く扱うためにはクエリービルダーの使い方を学習する必要があります。

 

WHERE節の使い方

基本

Where節の基本的な使い方は

第1引数はカラム名

第2引数はデータベースがサポートしているオペレーター

(※オペレータが '=' (等しい)場合は第2引数を省略できます。)

第3引数はカラムに対して比較する

になります。

 
where(‘カラム名’, ‘不等号などのオペレーター’, ‘比較する値’)
 

[例] "votes"カラムの値が100と等しいレコードのクエリを発行する場合

#Query Builder
use DB;
$users = DB::table('users')->where('votes', '=', 100)->get();

クエリービルダーはDBファサードのTABLEメソッドを使います。

先にuseでDBクラスをインポートします。

チェーンの最後にあるgetメソッドはクエリーの結果(レコード)を配列にして返してくれます。

つまり、$usersは配列になります。

$usersを取り出すときはforeachでまわします。

foreach ($users as $user) {
  echo $user->name;
}

 
Eloquentはクエリービルダーなので同じように使うことができます。

#Eloquent
use App\User
$users = User::where('votes', '=', 100)->get();

EloquentはUserモデル(※テーブルに対応するモデル)を介してDBのテーブルを操作します。

DBクラスではなくUserモデルをインポートします。

 

応用

基本形に集計メソッドやorderByメソッドなど、チェーンで繋げていきます。

 

並び順を追加

基本形の形にチェーンでOrderByメソッドを追加します。

[例] "votes"カラムの値が100と等しい条件で抽出し、nameカラムを昇順で並びかえて表示。

$users = DB::table('users')
  ->where('votes', '=', 100)
  ->orderBy('name', 'desc')
  ->get();

orderByメソッドの最初の引数はソート対象のカラムです。

第2引数はソートの降順(asc)と昇順(desc)で並びかえます。

 

1レコードのみ抽出

基本形の形にチェーンでfirstメソッドを追加します。

[例] "votes"カラムの値が100と等しい条件で最初のレコードのみ抽出。

$user = DB::table('users')
  ->where('votes','=', '100')
  ->first();

 

OR節を追加

基本の形にチェーンで orWhereメソッド を追加します。

[例] "votes"カラムの値が100と等しいもしくは"name"カラムが"John"の条件を抽出。

$users = DB::table('users')
  ->where('votes', '=', 100)
  ->orWhere('name', 'John')
  ->get();

 

集計を追加

基本形の形にチェーンでcountメソッドを追加します。

[例] "votes"カラムの値が100と等しい条件のレコードをカウントして抽出。

$user = DB::table('users')
  ->where('votes','=', '100')
  ->count();

countメソッド以外にもmax、min、avg、sumメソッドも使用できます。

 

複数条件

Where節には配列で条件を渡すこともできます。

[例] "status"カラムの値が1と等しくかつ"subscribed"カラムが1と等しくない。

$users = DB::table('users')->where([
  ['status', '=', '1'],
  ['subscribed', '<>', '1'],
])->get();

 

クエリービルダーについては以上です。

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-実践知識