0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Laravel データ作成 データ表示編(json)

Last updated at Posted at 2023-08-13

はじめに

今回は前回までに対応したSeederのテストでーたをもとにVueによるデータ取得までの準備を記載する。

Vueによるデータ取得までの準備

環境について

以下で環境を作っている前提とする。

api.phpを使用

一旦jsonデータを表示させる。
フロントがVueなのでweb.phpではなく、api.phpを使用する。

routes/api.php

Route::get('user/{id}', [ApiController::class, 'show']);

urlは以下となる
http://127.0.0.1:8000/api/user/1

routes/api.phpに記述されているルートは基本的にhttp://127.0.0.1:8000/api/から始まるURLにマッチするようになっている。

コントローラ

実行するコントローラを以下のようにする。

ApiController.php
<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;

class ApiController extends Controller
{
    public function show($id)
    {
        $user = User::with('projects.tasks')->find($id);

        if (!$user) {
            return response()->json(['message' => 'User not found'], 404);
        }

        return $user;
    }
}

with()メソッドのあるUser::with('projects.tasks')->find($id);の行は、指定したIDのユーザを取得し、同時にそのユーザが所有するプロジェクトと、各プロジェクトが所有するタスクも一緒に取得する。
with()メソッドはLaravelのEloquent ORMにおける「イーガーロード」を行うためのもの。
「イーガーロード」とは、関連するデータを事前にロードすることで、後続の操作で必要なSQLクエリの数を減らすためのテクニック。
例えば、ユーザが所有するプロジェクトを取得し、それぞれのプロジェクトが所有するタスクを取得する場合を考える。これらを通常の方法で取得すると、まずユーザを取得、次にそのユーザのプロジェクトを一つずつ取得、さらに各プロジェクトが持つタスクを一つずつ取得というように、必要なデータの量に応じて多くのSQLクエリが発生する。これは大量のデータを扱う場合にパフォーマンスに影響を及ぼす可能性がある。
それに対しwith('projects.tasks')を使うと、ユーザ、プロジェクト、タスクのデータをそれぞれ1回のクエリで一括して取得する。これによりSQLクエリの数が大幅に減り、パフォーマンスが向上する。
なお、このメソッドを使うためには、関連するモデル間にリレーションシップが定義されている必要があります。この例ではUserモデルはProjectモデルと、ProjectモデルはTaskモデルとそれぞれリレーションシップを持っている必要がある。

jsonデータ表示

http://127.0.0.1:8000/api/user/1
スクリーンショット 2023-08-13 15.25.02.png

終わりに

今回は大したテーマではないが、長くなったので4回に分けて実施した。
次の開発のステップに進みたい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?