ユアスク by みんなシステムズ

MENU

意外と知らない!LaravelクエリビルダとEloquentについて

2023/08/22

こんにちは、後藤です。

Laravelの公式ドキュメントを見ていると、まだまだ知らない言葉がたくさん出てきます。「実際に使ってるんだけど、意味をよく理解していない…」そんなことがよくありそうなので、今回はLaravelクエリビルダとEloquentについて紹介していきます。

クエリビルダ

クエリビルダは、SQLクエリの生成を支援します。Eloquentよりもシンプルな操作が可能で、高度なクエリも柔軟に記述できます。

集計関数

クエリビルダでは、集計関数を簡単に使うことができます。

$count = DB::table('users')->count();

$average = DB::table('orders')->avg('price');

サブクエリ

サブクエリもシンプルに記述できます。

$latestPosts = DB::table('posts')
               ->select('user_id', DB::raw('MAX(created_at) as last_post_created_at'))
               ->groupBy('user_id');

$users = DB::table('users')
        ->joinSub($latestPosts, 'latest_posts', function ($join) {
            $join->on('users.id', '=', 'latest_posts.user_id');
        })->get();

Eloquent ORM

EloquentはLaravelのORMで、オブジェクト指向プログラミングを活用してデータベース操作を簡潔にします。

モデルの関連付け

Eloquentの強みは、モデル間のリレーションシップを簡単に扱えることです。

class Post extends Model
{
    public function user()
    {
        return $this->belongsTo('App\Models\User');
    }
}

// 例: ユーザーに関連する投稿を取得
$posts = User::find(1)->posts;

モデルのイベント

データベースの操作に対して自動でトリガされるイベントも扱いやすいです。

class User extends Model
{
    protected static function booted()
    {
        static::created(function ($user) {
            // 新規ユーザーが作成された後の処理
        });
    }
}

まとめ

プログラミングを学習する上で、手を動かすことも大事ですが、やっていることの意味を理解する時間も大切だと思います。皆さんもぜひ公式ドキュメントを見返す時間をつくって、理解を深めていきましょう!