データベース:クエリビルダsettingssearchanchorlibrary_booksイントロダクションIntroductionデータベースクエリビルダはスラスラと書ける(fluent)便利なインターフェイスで、クエリを作成し実行するために使用します。アプリケーションで行われるほとんどのデーターベース操作が可能で、サポートしている全データベースシステムに対し使用できます。systems.LaravelクエリビルダはアプリケーションをSQLインジェクション攻撃から守るために、PDOパラメーターによるバインディングを使用します。バインドする文字列をクリーンにしてから渡す必要はありません。Tableクエリを書くにはDBファサードのtableメソッドを使います。tableメソッドは指定したテーブルに対するクエリビルダインスタンスを返します。これを使いクエリに制約を加え、最終的な結果を取得するチェーンを繋げます。次に、最終的な結果をgetで取得します。}}getメソッドは、PHPのStdClassオブジェクトのインスタンスを結果として含む、Illuminate\Support\Collectionを返します。各カラムの値は、オブジェクトのプロパティとしてアクセスできます。Tableデータベーステーブルから1レコードのみ取得する必要がある場合は、firstメソッドを使います。このメソッドはStdClassオブジェクトを返します。$user->name;全カラムは必要ない場合、valueメソッドにより一つの値のみ取得できます。このメソッドはカラムの値を直接返します。Values単一カラムの値をコレクションで取得したい場合はpluckメソッドを使います。以下の例では役割名(title)をコレクションで取得しています。$title;}取得コレクションのキーカラムを指定することもできます。Results数千のデータベースレコードを扱う場合はchunkメソッドの使用を考慮してください。このメソッドは一度に小さな「かたまり(chunk)」で結果を取得し、このチャンクは処理のために「クロージャ」に渡されます。このメソッドは数千のレコードを処理するArtisanコマンドを書くときに便利です。usersレコード全体から一度に100レコードずつチャンクを処理する例を見てください。}});クロージャからfalseを返すとチャンクの処理を中断できます。false;});集計Aggregatesまたクエリビルダはcount、max、min、avg、sumなど多くの集計メソッドを提供しています。クエリを制約した後にこれらのメソッドを使うことも可能です。DB::table('orders')->max('price');もちろんこれらのメソッドをクエリを構築するために他の節と組み合わせて使用できます。Clauseもちろん、いつもデータベースレコードの全カラムが必要ではないでしょう。クエリのselect節をselectメソッドで指定できます。user_email')->get();distinctメソッドで重複行をまとめた結果を返すように強制できます。DB::table('users')->distinct()->get();既にクエリビルダインスタンスがあり、select節にカラムを追加したい場合はaddSelectメソッドを使ってください。Expressions時々、クエリの中でSQLを直接使用したいことがあります。エスケープなしのSQLを使用する場合はDB::rawメソッドを使用します。rawメソッドはクエリを文字列として挿入するため、SQLインジェクションの脆弱性を生まないように十分気をつけてください。MethodsDB::rawを使用する代わりに、クエリの様々な箇所へSQL文を挿入する、以降のメソッドも使用できます。query.selectRawselectRawselectRawメソッドは、select(DB::raw(...))に置き換えて使用できます。このメソッドは、第2引数へバインド値の配列を指定することも可能です。orWhereRawwhereRawとorWhereRawメソッドは、クエリへwhere節を挿入できます。これらのメソッドは、第2引数にバインド値の配列を指定することもできます。orHavingRawhavingRawとorHavingRawメソッドは、文字列をhaving節の値として指定するために使用します。by節の値として指定するために使用します。ClauseさらにクエリビルダはJOIN文を書くためにも使用できます。JOIN"を実行するには、クエリビルダインスタンスにjoinメソッドを使ってください。joinメソッドの第1引数は結合したいテーブル名、それ以降の引数にはJOIN時のカラムの制約条件を指定します。下記のように、一つのクエリで複数のテーブルを結合できます。JOIN"を実行したい場合はleftJoinメソッドを使います。leftJoinメソッドの使い方はjoinメソッドと同じです。Clause「クロスジョイン」を実行するときは、接合したいテーブル名を指定し、crossJoinメソッドを使ってください。クロスジョインにより、最初のテーブルと指定したテーブルとの、デカルト積を生成します。Clausesさらに上級なJOIN節を指定することもできます。そのためにはjoinメソッドの第2引数に「クロージャ」を指定します。その「クロージャ」はJOIN節に制約を指定できるようにするJoinClauseオブジェクトを受け取ります。->get();JOINに"where"節を使用したい場合はjoinの中でwhereやorWhereを使用して下さい。2つのカラムを比べる代わりに、これらのメソッドは値とカラムを比較します。->get();UNIONUnionsクエリビルダは2つのクエリを結合(union)させる手軽な手法を提供します。最初にクエリを作成し、その後に2つ目のクエリを結合するためにunionメソッドを使います。unionと同じ使い方のunionAllメソッドも使えます。Clauseswhere節をクエリに追加するには、クエリビルダインスタンスのwhereメソッドを使います。基本的なwhereの呼び出しでは3つの引数を使います。第1引数はカラム名です。第2引数はデータベースがサポートしているオペレーターです。第3引数はカラムに対して比較する値です。column.例として、"votes"カラムの値が100と等しいレコードのクエリを見てください。100)->get();カラムが指定値と等しいかを比べたい場合は利便性を良くするため、whereメソッドの第2引数に値をそのまま指定できます。100)->get();もちろん、where文を書くときには、その他いろいろなオペレータも使えます。->get();whereに配列で条件を渡すこともできます。StatementsWHEREの結合にチェーンでor節をクエリに追加できます。orWhereメソッドはwhereメソッドと同じ引数を受け付けます。ClauseswhereBetweenwhereBetweenwhereBetweenメソッドはカラムの値が2つの値の間である条件を加えます。100])->get();whereNotBetweenwhereNotBetweenwhereNotBetweenメソッドは、カラムの値が2つの値の間ではない条件を加えます。whereNotInwhereInメソッドは指定した配列の中にカラムの値が含まれている条件を加えます。->get();whereNotInメソッドはカラムの値が指定した配列の中に含まれていない条件を加えます。whereNotNullwhereNullメソッドは指定したカラムの値がNULLである条件を加えます。->get();whereNotNullメソッドは指定したカラムの値がNULLでない条件を加えます。whereTimewhereDateメソッドはカラム値を日付と比較する時に使用します。->get();whereMonthメソッドはカラム値と、ある年の指定した月とを比較します。->get();whereDayメソッドはカラム値と、ある月の指定した日とを比べます。->get();whereYearメソッドはカラム値と、指定した年とを比べます。->get();whereTimeメソッドはカラム地と、指定した時間を比較します。->get();whereColumnwhereColumnwhereColumnメソッドは2つのカラムが同値である確認をするのに使います。->get();メソッドに比較演算子を追加指定することもできます。->get();whereColumnへ配列により複数の条件を渡すこともできます。各条件はandオペレータでつなげられます。EXISTS"節やグループにまとめたパラーメーターのネストのような、上級のWHERE節を作成する必要が起きます。Laravelクエリビルダはこれらもうまく処理できます。手始めに、カッコで制約をまとめる例を見てください。->get();ご覧の通り、orWhereメソッドに渡している「クロージャ」が、クエリビルダのグルーピングを指示しています。生成するSQLの括弧内で展開される制約を指定できるように、「クロージャ」はクエリビルダのインスタンスを受け取ります。EXISTSのSQLを書けるように用意しています。whereExistsメソッドは引数に「クロージャ」を取り、"EXISTS"節の中に置かれるクエリを定義するためのクエリビルダを受け取ります。->get();上のクエリは以下のSQLを生成します。ClausesLaravelはデータベース上のJSONタイプをサポートするカラムに対するクエリに対応しています。現在、MySQL5.7とPostgreSQLに対応しています。JSONカラムをクエリするには->オペレータを使ってください。OffsetorderByorderByorderByメソッドは指定したカラムでクエリ結果をソートします。orderByメソッドの最初の引数はソート対象のカラムで、第2引数はソートの昇順(asc)と降順(desc)をコントロールします。oldestlatestとoldestメソッドにより、データの結果を簡単に整列できます。デフォルトで、結果はcreated_atカラムによりソートされます。ソートキーとしてカラム名を渡すこともできます。->first();inRandomOrderinRandomOrderinRandomOrderメソッドはクエリ結果をランダムな順番にしたい時に使用します。以下のコードはランダムにユーザーを一人取得します。havinggroupByとhavingメソッドはクエリ結果をグループにまとめるために使用します。havingメソッドはwhereメソッドと似た使い方です。->get();複数カラムによるグループ化のため、groupByメソッドに複数の引数を指定できます。->get();より上級なhaving文については、havingRawメソッドを参照してください。takeクエリから限られた(LIMIT)数のレコードを受け取ったり、結果から指定した件数を飛ばしたりするには、skipとtakeメソッドを使います。DB::table('users')->skip(10)->take(5)->get();別の方法として、limitとoffsetメソッドも使用できます。Clausesある条件がtrueの場合の時のみ、クエリへ特定の文を適用したい場合があります。特定の入力値がリクエストに含まれている場合に、where文を適用する場合です。whenメソッドで実現できます。->get();whenメソッドは、第1引数がtrueの時のみ、指定されたクロージャを実行します。最初の引数がfalseの場合、クロージャを実行しません。executed.whenメソッドの第3引数に別のクロージャを渡せます。このクロージャは、最初の引数の評価がfalseであると実行されます。この機能をどう使うかを確認するため、クエリのデフォルトソートを設定してみましょう。->get();INSERTInsertsクエリビルダは、データベーステーブルにレコードを挿入するためのinsertメソッドを提供しています。insertメソッドは挿入するカラム名と値の配列を引数に取ります。0]);配列の配列をinsertに渡して呼び出すことで、テーブルにたくさんのレコードを一度にまとめて挿入できます。IDsテーブルが自動増分IDを持っている場合、insertGetIdメソッドを使うとレコードを挿入し、そのレコードのIDを返してくれます。PostgreSQLでinsertGetIdメソッドを使う場合、自動増分カラム名はidである必要があります。他の「シーケンス」からIDを取得したい場合は、insertGetIdメソッドの第2引数へカラム名を指定してください。method.UPDATEUpdatesもちろん、データベースへレコードを挿入するだけでなく、存在しているレコードをupdateメソッドで更新することもできます。updateメソッドはinsertメソッドと同様に、更新対象のカラムのカラム名と値の配列を引数に受け取ります。更新するクエリをwhere節を使って制約することもできます。ColumnsJSONカラムを更新する場合、JSONオブジェクトの中の適切なキーへアクセスするために、->記法を使ってください。JSONカラムをサポートしているデータベースでのみ、このオペレータをサポートしています。Decrementクエリビルダは指定したカラムの値を増やしたり、減らしたりするのに便利なメソッドも用意しています。これは短縮記法で、update分で書くのに比べるとより記述的であり、簡潔なインターフェイスを提供しています。statement.両方のメソッドともに、最小1つ、更新したいカラムを引数に取ります。オプションの第2引数はそのカラムの増減値を指定します。5);さらに増減操作と一緒に更新する追加のカラムを指定することもできます。'John']);DELETEDeletesクエリビルダはdeleteメソッドで、テーブルからレコードを削除するためにも使用できます。deleteメソッドを呼び出す前にwhere節を追加し、delete文を制約することもできます。100)->delete();全レコードを削除し、自動増分のIDを0にリセットするためにテーブルをTRUNCATEしたい場合は、truncateメソッドを使います。Lockingクエリビルダは、SELECT文で「悲観的ロック」を行うための機能をいくつか持っています。SELECT文を実行する間「共有ロック」をかけたい場合は、sharedLockメソッドをクエリに指定して下さい。共有ロックはトランザクションがコミットされるまで、SELECTしている行が更新されることを防ぎます。100)->sharedLock()->get();もしくはlockForUpdateメソッドが使えます。占有ロックをかけることで、レコードを更新したりSELECTするために他の共有ロックが行われるのを防ぎます。2017.ドキュメントメンテナンス期間は終了しました。明暗テーマごとに、コードハイライトのテーマを指定できます。テーマ配色確認スクリーン表示幅640px80%90%100%768px以上の幅があるときのドキュメント部分表示幅です。段落末のEボタンへカーソルオンで原文をPopupします。[tl!...]形式の挿入削除行の表示形式です。置換文字列を半角スペースで区切ってください。(最大5組各10文字まで)本文フォント総称名以外はCSSと同様に、"〜"でエスケープしてください。コードフォント総称名以外はCSSと同様に、"〜"でエスケープしてください。保存内容リセット消去localStrageに保存してある設定項目をすべて削除し、デフォルト状態へ戻します。