基本の部分(Laravel)

Laravelのクエリビルダについて記法も含めてまとめてみました。

Laravelのクエリビルダについて記法も含めてまとめてみました。

クエリビルダとは

クエリビルダとは、DBからレコードを取得する際にSQL文を組み立てて問い合わせを行う際に使用される、比較的簡単にSQL文を組み立てることができる機能です。

利点としては、SQL文に詳しくなくてもこの機能を理解していれば簡単にDB操作を行えたり、SQLインジェクションなどの攻撃への問題などを解決してくれたりします。

上記の利点から直接SQLクエリを実行するような書き方は極力避け、クエリビルダを使用した設計をする方がオススメです。

クエリビルダの基本書式

クエリビルダの基本的な書式を以下に記載致します。

まず、DBFacadesをuseし、次にDBFacadesメソッドを使用し、引数に取得したいDBのテーブル名を記載します。

DB::tableは「Builder」クラスのインスタンスを返します。そこからgetというメソッドを呼びだすことで、全レコードを取得します。

この「Builder」がクエリビルダの機能を提供します。

データ取得メソッド

Laravelのクエリビルダには以下の取得メソッドがあります。

get()

条件に沿ったデータを全て取得します。

first()

結果データの最初の1件のみを取得します。

pluck()

指定したカラム1つだけをコレクションで取得します。

ただし、1カラムの全レコードを全て取得するので、一件だけ欲しい場合は下記で記載しているget()を使用ください。

また、第一引数に取得したいカラム・第二引数にプロパティカラムを指定すると、他カラムと紐づいた状態でデータを取得することが可能です。

get()

指定したカラム1つだけを取得します。

こちらはpluckメソッドと違い、1件のみを取得するので、where句などと併用して狙った1件を取得する際に使用するのをおすすめします。

exists()

existsメソッドを使用すると条件に対して、該当レコードが存在するか確認することができます。

レコードが存在したら$dataにTrueが、存在しなければFalseが返ります。

doesntExist()

doesntExistメソッドはexistsメソッドの反対を返します。レコードが存在しない場合はTrueを、存在したらFalseを返却します。

chunk()

扱うデータの量が膨大になってくると、すべてのデータを取り出して繰り返しなどで延々と処理していくのはかなり大変です。

そのような場合はchunkメソッドを使用すれば、検索結果を一定数ごとに分割することが可能です。

これでもしpeopleテーブルにレコードが1000件や10000件を超えていたとして、30件ずつ取り出して処理を行うことが可能です。

集計方法

laravelのクエリビルダにはある程度集計メソッドが事前に準備されております。

count()

countメソッドはレコードの件数を取得することができます。

max()

maxメソッドは指定したカラムの最大値を取得することができます。

min()

minメソッドは指定したカラムの最小値を取得することができます。

avg()

avgメソッドは指定したカラムの平均値を取得することができます。

sum()

sumメソッドは指定したカラムの合計値を取得することができます。

色々なWhere

レコードの検索にはwhereメソッドを使用して行います。whereメソッドは比較的多くのものが準備されており、覚えておくとより柔軟な検索ができるようになります。

where()

whereメソッドはwhere句に相当するもので、このwhereは引数にフィールド名と値を指定することで、指定された条件に合致するレコードを絞り込むことが可能です。

これにより指定したフィールドの値が第二引数の値と同じレコードを検索することが可能です。

また、演算記号を指定した検索も可能です。

orWhere

より複雑な検索として「複数の条件を設定する」という場合もあるかと思います。この場合はwhereとorWhereを使用して設定できます。

全ての条件に合致するものだけを検索

複数の条件を設定し、すべての条件に合致したものだけを検索する場合は、このようにwhereメソッドを複数続けて記載していきます。

条件に一つでも合致すれば全て検索

複数の条件のうちどれか一つでも合致すれば全て検索する場合は、最初にwhereで条件を指定し、その後にorWhereを使って条件を追加します。

whereRaw()

検索条件が複雑になった場合は、いくつもwhereを続けて記載するより複数の条件を文字列で指定するwhereRawメソッドの方が役立つ場合もあります。

第一引数に検索のための式を用意し、第二引数にパラメータの配列を用意します。

whereBetween()

「○○以上○○以下」というような最小値と最大値を指定してその範囲内を検索したいというのは頻繁にあります。クエリビルダではそのためのメソッドも用意されております。

2つの値の範囲内を検索

2つの値の範囲外を検索

orが付いたメソッドは他の条件の後にor検索で繋げます。いずれも第二引数に最小値と最大値を配列にまとめて指定します。

whereIn()

「○○の値が✖✖や△△や□□」のような複数の値を探す場合はwhereメソッドで行おうとすると冗長になってしまいます。

その場合はwhereInメソッドを使用しましょう。

配列に含まれている値と等しいものを検索

配列に含まれている値と等しいもの以外を検索

whereNull()

値がnullかどうかをチェックするためのwhereも用意されています。

特定の項目がnullなもの、あるいはnull出ないものを簡単に絞りこむことができます。

特定フィールドがnullなものを検索

特定フィールドがnullでないものを検索

日時のチェック

日時のチェックをするためのwhereも用意されております。

日付のチェック

年のチェック

月のチェック

日のチェック

時刻のチェック

 

並び順を指定するorderBy

レコードを検索して取得する場合、取り出されるレコードは基本的に作成した順番になっています。この並び順を変更したい場合は、「orderBy」メソッドを使用しましょう。

orderBy()

第一引数には並び順の基準となるフィールド名を指定し、第二引数には’asc’又は’desc’を指定します。

asc 昇順
desc 降順

offset()

offsetは指定した位置からレコードを取得するためのものとなります。

limit()

指定した数だけレコードを取得します。

 

これからLaravelを始めるならこれが最適!!


今までLaravelに関しての良書はほとんどなく、あっても内容が古かったり分かりにくいのばかりで、先駆者達は苦労したのではないでしょうか?

そんな中で発売されたこの本は、現在の日本国内にて唯一のLaravelの良書と言い切っても良いかと思います。PHP中級者以上なら苦労することなく読めるでしょう。Laravelは高機能ゆえ、全機能を説明してはいませんが、この本をとっかかりにすれば自ずとLaravelをマスターすることができると思います。