日本語Englishイントロダクション結果の取得(集計)SELECTJOINUNIONWHERE節(高度なWHERE節)順序、グループ分け、制限、オフセットINSERTUPDATEDELETE排他的ロックイントロダクションデータベースクエリービルダーはスラスラと書ける(fluent)便利なインターフェイスで、クエリーを作成し実行するために使用します。アプリケーションで行われるほとんどのデーターベース操作が可能で、サポートしている全データベースシステムに対し使用できます。LaravelクエリービルダーはアプリケーションをSQLインジェクション攻撃から守るために、PDOパラメーターによるバインディングを使用します。バインドする文字列をクリーンにしてから渡す必要はありません。全レコードの取得クエリーをスラスラと書くにはDBファサードのtableメソッドを使います。tableメソッドは指定したテーブルに対するクエリービルダーインスタンスを返します。これを使いクエリーに制約を加え、最終的な結果を取得するチェーンを繋げます。次の例でテーブルの全レコードを取得(get)してみましょう。}}直接クエリーを行う場合と同様に、getメソッドはPHPのStdClassオブジェクトのインスタンスを結果とする「配列」を返します。オブジェクトのプロパティーによりカラムの値にアクセスできます。$user-&gt;name;}テーブルから1カラム/1レコード取得データベーステーブルから1レコードのみ取得する必要がある場合は、firstメソッドを使います。このメソッドはStdClassオブジェクトを返します。$user-&gt;name;全カラムは必要ない場合、valueメソッドにより一つの値のみ取得できます。このメソッドはカラムの値を直接返します。数千のデータベースレコードを扱う場合はchunkメソッドの使用を考慮してください。このメソッドは一度に小さな「かたまり(chunk)」で結果を取得し、このチャンクは処理のために「クロージャ」に渡されます。このメソッドは数千のレコードを処理するArtisanコマンドを書くときに便利です。usersレコード全体から一度に100レコードずつチャンクを処理する例を見てください。}});クロージャーからfalseを返すとチャンクの処理を中断できます。配列で一つのカラムの値を取得したい場合はlistsメソッドを使います。以下の例では役割名(title)を配列で取得しています。$title;}取得配列のキーカラムを指定することもできます。$title;}集計またクエリービルダーはcount、max、min、avg、sumなど多くの集計メソッドを提供しています。クエリーを制約した後にこれらのメソッドを使うことも可能です。DB::table(&#39;orders&#39;)-&gt;max(&#39;price&#39;);もちろんこれらのメソッドをクエリーを構築するために他の節と組み合わせて使用できます。-&gt;avg(&#39;price&#39;);SELECTSELECT節の指定もちろん、いつもデータベースレコードの全カラムが必要ではないでしょう。クエリーのselect節をselectメソッドで指定できます。user_email&#39;)-&gt;get();distinctメソッドで重複行をまとめた結果を返すように強制できます。DB::table(&#39;users&#39;)-&gt;distinct()-&gt;get();既にクエリービルダーインスタンスがあり、select節にカラムを追加したい場合はaddSelectメソッドを使ってください。$query-&gt;addSelect(&#39;age&#39;)-&gt;get();SQL文の直接指定たまにクエリーの中でSQLを直接使用したいことがあります。エスケープなしのSQLを使用する場合はDB::rawメソッドを使用します。JOIN文さらにクエリービルダーはJOIN文を書くためにも使用できます。JOIN"を実行するには、クエリービルダーインスタンスにjoinメソッドを使ってください。joinメソッドの第1引数は結合したいテーブル名、それ以降の引数にはJOIN時のカラムの制約条件を指定します。下記のように、一つのクエリーで複数のテーブルを結合できます。JOIN"を実行したい場合はleftJoinメソッドを使います。leftJoinメソッドの使い方はjoinメソッドと同じです。-&gt;get();上級のJOIN文さらに上級なJOIN節を指定することもできます。そのためにはjoinメソッドの第2引数に「クロージャー」を指定します。その「クロージャー」はJOIN節に制約を指定できるようにするJoinClauseオブジェクトを受け取ります。-&gt;get();JOINに"where"節を使用したい場合はjoinの中でwhereやorWhereを使用して下さい。2つのカラムを比べる代わりに、これらのメソッドは値とカラムを比較します。-&gt;get();UNIONクエリービルダーは2つのクエリーを結合(union)させる手軽な手法を提供します。最初にクエリーを作成し、その後に2つ目のクエリーを結合するためにunionメソッドを使えます。-&gt;get();同じ使い方のunionAllメソッドも使えます。単純なWHERE節where節をクエリーに追加するには、クエリービルダーインスタンスのwhereメソッドを使います。基本的なwhereの呼び出しでは3つの引数を使います。第1引数はカラム名です。第2引数はデータベースがサポートしているオペレーターです。第3引数はカラムに対して比較する値です。例として、"votes"カラムの値が100と等しいレコードのクエリーを見てください。100)-&gt;get();利便性のため、カラムが指定値と等しいかを比べたい場合は、whereメソッドの第2引数に値をそのまま指定できます。100)-&gt;get();もちろん、where文を書くときにその他のいろいろなオペレータも使えます。-&gt;get();OR節WHEREの結合にチェーンでor節をクエリーに追加できます。orWhereメソッドはwhereメソッドと同じ引数を受け付けます。-&gt;get();その他のWHERE節whereBetweenwhereBetweenメソッドはカラムの値が2つの値の間である条件を加えます。100])-&gt;get();whereNotBetweenwhereNotBetweenメソッドは、カラムの値が2つの値の間ではない条件を加えます。whereNotInwhereInメソッドは指定した配列の中にカラムの値が含まれている条件を加えます。-&gt;get();whereNotInメソッドはカラムの値が指定した配列の中に含まれていない条件を加えます。whereNotNullwhereNullメソッドは指定したカラムの値がNULLである条件を加えます。-&gt;get();whereNotBetweenメソッドは指定したカラムの値がNULLでない条件を加えます。EXISTS"やグループにまとめたパラーメーターのネストのような、上級のWHERE節を作成する必要が起きます。Laravelクエリービルダーはこれらもうまく処理できます。手始めにカッコで制約をまとめる例を見てください。-&gt;get();ご覧の通り、orWhereメソッドに渡している「クロージャー」が、クエリービルダーのグルーピングを指示しています。生成するSQLの括弧内で展開される制約を指定できるように、「クロージャー」はクエリービルダーのインスタンスを受け取ります。EXISTのSQLを書けるように用意しています。whereExistsメソッドは引数に「クロージャー」を取り、"EXISTS"節の中に置かれるクエリーを定義するためのクエリービルダーを受け取ります。-&gt;get();上のクエリーは以下のSQLを生成します。users.id)順序、グループ分け、制限、オフセットorderByorderByメソッドは指定したカラムでクエリー結果をソートします。orderByメソッドの最初の引数はソート対象のカラムで、第2引数はソートの降順(asc)と昇順(desc)をコントロールします。havingRawgroupByとhavingメソッドはクエリー結果をグループにまとめるために使用します。havingメソッドはwhereメソッドと似た使い方です。-&gt;get();havingRawメソッドはhaveing節の値としてSQL文字列をそのまま指定するために使用します。2,500ドルより多く売り上げている部門(department)を全部見つけましょう。takeクエリーから限られた数の(LIMIT)レコードを受け取ったり、結果から指定した件数を飛ばしたり(OFFSET)するには、skipとtakeメソッドを使います。DB::table(&#39;users&#39;)-&gt;skip(10)-&gt;take(5)-&gt;get();INSERTクエリービルダーは、データベーステーブルにレコードを挿入するためのinsertメソッドを提供しています。insertメソッドは挿入するカラム名と値の配列を引数に取ります。0]);配列の配列をinsertに渡して呼び出すことで、テーブルにたくさんのレコードを一度にまとめて挿入できます。0]]);自動増分IDテーブルが自動増分IDを持っている場合、insertGetIdメソッドを使うとレコードを挿入し、そのレコードのIDを返してくれます。PostgreSQLでinsertGetIdメソッドを使う場合、自動増分カラム名はidである必要があります。他の「シーケンス」からIDを取得したい場合は、insertGetIdメソッドの第2引数にシーケンス名を指定してください。UPDATEもちろん、データベースへレコードを挿入するだけでなく、存在しているレコードをupdateメソッドで更新することもできます。updateメソッドはinsertメソッドと同様に、更新対象のカラムのカラム名と値の配列を引数に受け取ります。更新するクエリーをwhere節を使って制約することもできます。1]);カラム値の増加/減少クエリービルダーは指定したカラムの値を増やしたり、減らしたりするのに便利なメソッドも用意しています。これはシンプルな短縮記法で、update分で書くのに比べるとより記述的であり、簡潔なインターフェイスを提供しています。両方のメソッドともに変更したいカラムを第1引数に指定します。オプションの第2引数はそのカラムの増減値を指定します。5);さらに増減操作と一緒に更新する追加のカラムを指定することもできます。&#39;John&#39;]);DELETEもちろん、クエリービルダーはdeleteメソッドで、テーブルからレコードを削除するためにも使用できます。DB::table(&#39;users&#39;)-&gt;delete();deleteメソッドを呼び出す前にwhere節を追加し、delete文を制約することもできます。100)-&gt;delete();全レコードを削除し、自動増分のIDを0にリセットするためにテーブルをTRUNCATEしたい場合は、truncateメソッドを使います。DB::table(&#39;users&#39;)-&gt;truncate();悲観的ロッククエリービルダーは、SELECT文で「悲観的ロック」を行うための機能をいくつか持っています。SELECT文を実行する間「共有ロック」をかけたい場合は、sharedLockメソッドをクエリーに指定して下さい。共有ロックはトランザクションがコミットされるまで、SELECTしている行が更新されることを防ぎます。100)-&gt;sharedLock()-&gt;get();もしくはlockForUpdateメソッドが使えます。占有ロックをかけることで、レコードを更新したりSELECTするために他の共有ロックが行われるのを防ぎます。kawase(Translation).。