こんにちは、おーしまです。
今回は、WhereRawでクエリビルダに直接SQL文を挿入する方法について書きます。
例えば、resource_stocksという資材の在庫を管理するテーブルがあったとします。
内容は以下の通りです。
ここで、ターミナルで、
select stock + 1000 from resource_stocks;
と記述すると、
上記の画像のように、stockカラムの数値に+1000されたデータが並びました。
SQL文ではこれを1つのカラムとして扱うことができるのです。
この時、カラム名は「stock + 1000」となっています。
新しく作ったカラムに独自の名前をつける場合は、
select stock + 1000 from resource_stocks as おーしま;
とすることで、「おーしま」と言うstockカラムに+1000した新しいカラムができます。
以上を踏まえて、whereRawについて書いていきます。
今回は、先程のresource_stocksテーブルのstockに数値を足して、その値が20以下のものを取得したいとします。
しかし、その数値が「$plusStock」と言う変数になっているとします。
すると、こうなります。
<? php $select->whereRaw('stock + ? <= 20', [$plusStock]); ?>
whereRaw( 'SQL文' , [変数])
で表されていて、変数を入れたい箇所を「?」として、第二引数の配列に変数を記述することで代入されます。
2つ、もしくは3つの変数を使いたい時でも、「?」を変数の数だけ記述して、使用する順番に配列に変数を記述することで対応できます。
DB::rawでも変数を直接入れることができますが、もし変数の中身に悪意のある文字列などが入っていた時、テーブルの値を全て消されるなどの脆弱性があり危険なので、whereRawやselectRawを使用するようにしましょう。
whereRawやselectRawを使用すれば、もし悪意のある文字列が変数の中に入っていても、Laravelがはじいてくれます。
今回はここまでです。
それでは、また。