
#84 Laravelアウトプット
こんにちは、hiroです😃 わたくし、意思が激弱の人間です。笑
毎週日曜日の流れを勝手に説明すると、「プログラミングの学習せんと!」と思いながら、午前中に来週の食材の買い出しに行き、マクドで昼食をとり、家に帰ってカープが始まるまでソファでくつろいでしまいます😂「プログラミング学習せんと!」と継続して頭の中にあるものの、そのままカープを観戦し、途中で寝落ちし、気がついたら16:00〜17:00になり絶望します。罪滅ぼしも兼ねて、ようやくnote投稿とプログラミング学習をする流れになっております。。。
だらだらする原因を考えると、いや、考えるまでもなく、間違いなくマクドを食べて「帰ってソファに座ってしまう事」だと感じました。笑
今日はその反省を活かし、帰ってきたらそのまま机の椅子に座り、note投稿をしております。今日は自分の意思に勝つことが出来ました!🙄
このままの勢いで学習した内容をアウトプットしていきたいと思います!
本日はLaravelで使うクエリビルダをアウトプットします!
SELECT句の指定
selectメソッドを使用して、取得するカラムを指定する。
引数に取得したいカラムを渡す。
use Illuminate\Support\Facades\DB;
$users = DB::table('users')
->select('name', 'email as user_email')
->get();
SQL文を直接記述する
クエリビルダの中で、直接SQL文を記述する事ができる。
rawメソッドを使用する事で実現できる。
$users = DB::table(' users ')
->select(DB::raw('count(*) as user_count, status'))
->where('status', '<>',1)
->groupBy('status')
->get();
rawメソッド
DB::rawメソッドを使用する代わりにクエリの様々な部分に素のSQL式を挿入することもできる。ただしその場合、SQLインジェクションの脆弱性からの保護をLaravelは保証しない事に注意する。
INNER JOIN句
joinメソッドを使用する。joinメソッドに渡す最初の引数は、結合するテーブルの名前、残りの引数は、結合のカラム制約を指定する。1つのクエリで複数のテーブルと結合することもできる。
1箇所だけでリレーションを利用したい場合は、Modelを触らず、joinを活用する。
use Illuminate\Support\Facades\DB;
$users = DB::table('users')
->join('contacts', 'users.id', '=', 'contacts.user_id')
->join('orders', 'users.id', '=', 'orders.user_id')
->select('users.*', 'contacts.phone', 'orders.price')
->get();
上級JOIN句
joinメソッドの2番目の引数にクロージャを渡す。クロージャはIllminate\Database\Query\JoinClauseインスタンスを受け取る。これにより、join句に制約を指定できる。
DB::table('users')
->join('contacts', function($join){
$join->on('user.id', '=', 'contacts.user_id')->orOn(...);
})
->get();
where句
whereメソッドを使用する。3つの引数が必要。
第一引数:カラムの名前
第二引数:演算子(データベースがサポートしている任意の演算子)
第三引数:カラムと比較する値
$users = BD::table(' users ')
->where('votes', '=', 100) ※where('votes', 100)と同義
->where('age', '>', 35)
->get();
orderBy
orderByメソッドを使用すると、クエリの結果を特定のカラムで並べ替える。
第一引数:並べ替えるカラム
第二引数:並べ替えの方向を決定する(asc, descのいずれか)
$users = DB::table('users')
->orderBy('name', 'desc')
->get();
複数の列で並べ替えるには、必要な回数のorderByを呼び出す。
$users = DB::table('users')
->orderBy('name', 'desc')
->orderBy('email', 'asc')
->get();
latestメソッド・oldestメソッド
結果を日付順に並べ替えできる。結果をテーブルのcreated_atカラムにより順序付けする。もしくは、並べ替えるカラム名を渡すこともできる。
$users = DB::table('users')
->latest()
->first();
ランダム順
クエリ結果をランダムに並べ替えできる。inRandomOrderメソッドを使用
$randomOrder = DB::table('users')
->inRandomOrder()
->first();
INSERT文
データベーステーブルにレコードを挿入するために使用できるinsertメソッドを提供している。カラム名と値の配列を引数に取る。
DB::table('users')->insert([
'email' => 'kayla@example.com',
'votes' => 0
]);
本日のアウトプットはここまで!