こんにちは!とびろぐ管理人のとびうおです。
今回は、Laravel10においての、Joinの使い方についての解説をしていこうと思います!
Joinを適切に使うことによって
パフォーマンスを上げていこう!
Laravelでwebポートフォリオを簡単に作れるようになる本を出しました
基本的なJoinの理解
まずは、joinとは何か、そしてなぜ重要なのかから始めましょう。
SQLにおけるjoinは、異なるテーブルのデータを連結するための方法です。
例えば、ユーザーテーブルと注文テーブルがあったとして、ユーザーごとの注文情報を一緒に取得したい場合にjoinを使用します。
一緒に取得できるので
クエリの発行数を減らすことができたりします。
Laravel 10でのJoinの基本
Laravelでは、Eloquent ORMを使用してデータベースとやり取りします。Join操作も例外ではありません。基本的なjoinは以下のように行います。
use App\Models\User;
use App\Models\Order;
$users = User::join('orders', 'users.id', '=', 'orders.user_id')
->get(['users.*', 'orders.details']);
このコードは、ユーザーテーブルと注文テーブルを結合し、それぞれのユーザーに関連する注文の詳細を取得します。
基本的なjoinの使い方だね
種類別Joinの使い方
Laravelでは、様々な種類のjoinをサポートしています。以下はその例です:
Inner Join
最も一般的なJoin。マッチするレコードのみを返します。
$users = User::join('orders', 'users.id', '=', 'orders.user_id')->get();
userテーブルに該当する
orderのみを取得する形です
Left Join
左側のテーブル(ここではusers)の全てのレコードを含み、マッチする右側のレコードを追加します。
$users = User::leftJoin('orders', 'users.id', '=', 'orders.user_id')->get();
右側左側というのに気をつけよう!
Right Join
Left Joinの逆で、右側のテーブルの全てのレコードを含みます。
$users = User::rightJoin('orders', 'users.id', '=', 'orders.user_id')->get();
右側左側というのに気をつけよう!
Cross Join
2つのテーブル間のすべての可能な組み合わせを作成します。
$users = User::crossJoin('orders')->get();
集計やレポートの作成の時に
使うことがあると思います!
あんまりそれ以外では作らなそうだけど…
上級テクニック
複数のJoin
複数のテーブルを結合することも可能です。
$users = User::join('orders', 'users.id', '=', 'orders.user_id')
->join('products', 'orders.product_id', '=', 'products.id')
->get();
サブクエリJoins
サブクエリを使用してより複雑なjoinを実現できます。
$latestPosts = DB::table('posts')
->select('user_id', DB::raw('MAX(created_at) as last_post_created_at'))
->where('is_published', true)
->groupBy('user_id');
$users = User::joinSub($latestPosts, 'latest_posts', function ($join) {
$join->on('users.id', '=', 'latest_posts.user_id');
})->get();
ユーザーが最後に投稿した日時を取得して、
それをユーザー情報に結合させています。
おわりに
Laravel 10では、これらのjoinメソッドを駆使して、複雑なデータベースクエリも簡単かつ効率的に扱うことができます。
この記事ではデータベース操作の基本から応用まで、Laravel 10でのjoinの使い方をご紹介しました。このガイドがあなたのLaravel旅路の一助となれば幸いです。もっと学びたい方は、Laravelの公式ドキュメントをチェックしてみてください。
トビログにはこの他にもたくさんLaravelの記事があります!ぜひ見てみてくださいね!↓
コメント