Laravel クエリビルダで DB 操作

Contents

Laravel クエリビルダで DB 操作

DB 操作のクエリビルダを見てきます。

クエリビルダ

クエリビルダはクエリの作成、実行などデータベース操作ができる便利なインターフェイスです。PDO(PHP Data Objects)パラメーターによるバインディングを使用します。
レスポンス値は stdClass Object を返します。
getメソッドは stdClass 含む Collection を返します。

取得

get

レコード一覧取得するにはgetメソッドを使います。

first

テーブルから1レコード取得するにはfirstメソッドを使います。

value

カラムを指定して値を取得するには valueメソッドを使います。

find

主キーを指定して1行取得するにはfindメソッドを使います。

pluck

カラムを指定して一覧取得するにはpluckメソッドを使います。

コレクションのキーカラムも指定して一覧取得

chunk

レコード数を指定して取得するにはchunkメソッドを使います。

offset / limit

レコード数を直接指定したい場合はoffsetメソッド、limitメソッドを使います。

skip / take

skipメソッド、takeメソッドを使います。

select

カラムを指定して取得するにはselectメソッドを使います。

distinct

重複を除外するにはdistinctメソッドを使います。

addSelect

インスタンスがあるカラムを追加するにはaddSelectメソッドを使います。

集計

count

カウントするにはcountメソッドを使います。

max

最大値を取得するにはmaxメソッドを使います。

min

最小値を取得するにはminメソッドを使います。

avg

アベレージを取得するにはavgメソッドを使います。

sum

合計値を取得するにはsumメソッドを使います。

SQL文を直接書く

raw

SQL文を直接書くにはrawメソッドを使います。

selectRaw

selectメソッドでSQL文を挿入するにはselectRawメソッドを使います。
第2引数にバインド値の配列を指定することも可能です。

whereRaw / orWhereRaw

whereメソッドでSQL文を挿入するにはwhereRawメソッド や orWhereRawメソッドを使います。

havingRaw / orHavingRaw

havingメソッドでSQL文を挿入するにはhavingRawメソッド、orHavingRawメソッドを使います。

orderByRaw

orderByメソッドでSQL文を挿入するにはorderByRawメソッドを使います。

groupByRaw

groupByメソッドでSQL文を挿入するにはgroupByRawメソッドを使います。

結合

join

INNER JOIN するにはjoinメソッドを使います。

leftJoin / rightJoin

LEFT JOIN や RIGHT JOINをするにはleftJoinメソッド、rightJoinメソッドを使います。

crossJoin

クロスジョインするにはcrossJoinメソッドを使います。

JoinClauseオブジェクトを使った JOIN

joinメソッドの第2引数に「クロージャ」を指定して、JoinClauseオブジェクトで制御します。

JOIN 条件 where / orWhere

joinの中で条件を指定するにはwhereメソッドやorWhereメソッドを使います。

joinSub / leftJoinSub / rightJoinSub

サブクエリのJOINをするにはjoinSubメソッド、leftJoinSubメソッド、rightJoinSubメソッドを使います。

union

2つのクエリを結合するにはunionメソッドを使います。

条件

WHERE

whereメソッドを使います。
第2引数は演算子を指定します。(条件を等しいとする場合には第2引数に値だけ指定することもできます)
第3引数は比較する値です。

>=<>likeを使った比較

複数の条件を配列で指定

orWhere

OR条件はorWhereメソッドを使います。

whereBetween / orWhereBetween

Between条件はwhereBetweenメソッド、orWhereBetweenメソッドを使います。

whereNotBetween / orWhereNotBetween

Between否定条件はwhereNotBetweenメソッド、orWhereNotBetweenメソッドを使います。

whereIn / whereNotIn / orWhereIn / orWhereNotIn

IN 演算子 はwhereInメソッド、whereNotInメソッド、orWhereInメソッド、orWhereNotInメソッドを使います。

whereNull / whereNotNull / orWhereNull / orWhereNotNull

IS NULL 演算子 はwhereNullメソッド、whereNotNullメソッド、orWhereNullメソッド、orWhereNotNullメソッドを使います。

whereDate / whereMonth / whereDay / whereYear / whereTime

日付系演算子 はwhereDateメソッド、whereMonthメソッド、whereDayメソッド、whereYearメソッド、whereTimeメソッドを使います。

whereColumn / orWhereColumn

2つのカラムの値を比較するにはwhereColumnメソッド、orWhereColumnメソッドを使います。

whereExists

exists 演算子 はwhereExistsメソッドを使います。
引数はクロージャを設定します。

JSON

->オペレータを使います。

JSON配列にはwhereJsonContainsメソッドを使います。

ソート

orderBy

ソートするにはorderByメソッドを使います。
第2引数でソートの昇順(asc)と降順(desc)をコントロールできます。

latest/oldest

簡易ソートするにはlatestメソッド、oldestメソッドを使います。
デフォルトは、created_atカラムでソートされます。
カラム名を指定することでソートキーを変更できます。

inRandomOrder

inRandomOrderメソッドを使います。
クエリ結果をランダム順にします。

groupBy / having

groupByメソッド、havingメソッドを使います。
グループ化したデータでhavingを使えます。

when

特定の条件時のみ、クエリに文を適用するにはwhenメソッドを使います。
第1引数が true の時のみ実行されます。
第2引数で指定されたクロージャが実行されます。

第1引数が false の時は、第3引数(オプション)に別のクロージャを指定しておくと実行されます。

登録

INSERT

insertメソッドを使います。

複数レコードを挿入する場合

配列でinsertメソッドへ渡すことでバルクインサートします。

insertOrIgnore

重複レコードは無視するにはinsertOrIgnoreメソッドを使います。

insertGetId

挿入してオートインクリメントIDを取得するにはinsertOrIgnoreメソッドを使います。

更新

UPDATE

updateメソッドを使います。

updateOrInsert

UPSERTのように条件と一致するレコードがあれば更新、一致するレコードが無ければ挿入するにはupdateOrInsertメソッドを使います。

JSON 型の Update

JSON 型の更新は->記法を使います。

値の増減

incrementメソッド、decrementメソッドを使います。
第2引数(オプション)で増減値を指定できます。
第3引数(オプション)で追加で更新するカラムを指定できます。

削除

DELETE

deleteメソッドを使います。

TRUNCATE

全削除、オートインクリメント値もリセットするにはtruncateメソッドを使います。
ロールバック不可です。

悲観的ロック

sharedLock

「共有ロック」をかけたい場合は、sharedLockメソッドを使います。

lockForUpdate

ForUpdateはlockForUpdateメソッドを使います。

トランザクション

トランザクションはtransactionメソッドを使います。
第2引数はデッドロックが発生したときに再試行する回数を定義します。

beginTransaction / rollBack / commit

トランザクションを手動で制御するにはbeginTransactionメソッド、rollBackメソッド、commitメソッドを使います。

参考リンク

Database: Query Builder
Laravel 6.x データベース:クエリビルダ

関連リンク

Laravel Eloquent で DB 操作

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA