【Laravel/MAMP】API開発の流れ!データベースへのCRUD処理

【Laravel/MAMP】API開発の流れ!データベースへのCRUD処理

この記事からわかること

  • LaravelAPI開発流れ
  • データベースへのCRUD処理実装方法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

LaravelでAPIを開発する流れ

Laravelを使用してAPIを開発する流れをまとめていきます。今回はひとまずローカル環境での開発ということでMAMPのMySQLを使用していきたいと思います。

流れ

  1. データベースの作成
  2. データベースの接続
  3. Eloquentモデル&マイグレーションファイルの作成
  4. コントローラーの作成
  5. ルーティングの定義

データベースの作成

最初にMAMPのMySQLコンソール画面からデータベースを作成します。「dev_test」データベースを作成しておきます。

【Laravel】API開発の流れ!データベースへのCRUD処理

データベースの接続

続いてLaravelプロジェクトとデータベースを連携していきます。連携方法は以下の記事を参考にしてください。

Eloquentモデル&マイグレーションファイルの作成

続いてデータベースCRUD処理を行えるEloquent(エロクアント)モデルテーブル構造を定義するためのマイグレーションファイルを作成します。 make:model-mオプションを付与することでモデルとマイグレーションファイルを同時に作成することができます。

$ php artisan make:model Record -m

これで「app」>「Models」ディレクトリ配下にRecord.php「database」>「migrations」ディレクトリ配下に{timestamp}_create_records_table.phpが生成されます。-mオプションは以下コマンドを実行したのと同義です。

$ php artisan make:migration create_records_table

{timestamp}_create_records_table.phpupメソッドにテーブル構造を定義します。


class CreateRecordsTable extends Migration
{
    public function up()
    {
        Schema::create('records', function (Blueprint $table) {
            $table->string('id')->primary(); 
            $table->string('name');
            $table->timestamps();
        });
    }
    public function down()
    {
        Schema::dropIfExists('records');
    }
}

定義できたらmigrateを実行して実際にMySQLに反映させます。ここでエラーが発生する場合はデータベース接続から見直してください。

$ php artisan migrate

続いてRecord.php内にテーブル名を定義するprotected $table入力可能な項目を定義するprotected $fillable変数を用意します。


class Record extends Model
{
    use HasFactory;

    // テーブル名
    protected $table = 'records';
    // 入力可能な項目
    protected $fillable = [
        'id',
        'name'
    ];
}

コントローラーの作成

続いて実際にテーブルのデータを登録したり、取得したりするコントローラーを作成します。make:controller--model=Recordを付与することでindexcreateなどCRUD処理に必要なメソッドの基盤を自動生成してくれます。

$ php artisan make:controller RecordAPIController --model=Record

自動生成された各メソッドには以下のような役割を実装します。

今回はAPI開発なのでcreateeditは空で定義しておきます。


class RecordAPIController extends Controller
{
    public function index()
    {
        // データベースから全データ取得
        $records = Record::all(); 
         // JSON形式で返却
        return response()->json($records);
    }

    public function create() { }

    public function store(Request $request)
    {
        // バリデーション
        $validatedData = $request->validate([
            'id' => 'required|string|max:255|unique:records,id',
            'name' => 'required|string|max:255',
        ]);
        // データベースに保存
        $record = Record::create($validatedData); 
        // 結果を返却
        return response()->json([
            'message' => 'Record created successfully',
            'record' => $record,
        ]);
    }

    public function show(Record $record)
    {
        // 指定されたRecordをJSONで返す
        return response()->json($record); 
    }

    public function edit(Record $record) { }

    public function update(Request $request, Record $record)
    {
        // バリデーション
        $validatedData = $request->validate([
            'name' => 'required|string|max:255',
        ]);
        // 既存データを更新
        $record->update($validatedData); 
         // 結果を返却
        return response()->json([
            'message' => 'Record updated successfully',
            'record' => $record,
        ]);
    }

    public function destroy(Record $record)
    {
        // データの削除
        $record->delete(); // データベースから削除
        return response()->json([
            'message' => 'Record deleted successfully',
        ]);
    }

}

ルーティングの定義

続いてコントローラーのアクションとURLを紐づけるルーティング設定です。今回はモデルとコントローラーを連携して作成しているので以下の記述だけで各メソッドへのルーティングが完了します。記述する箇所はapi.phpです。そのためURLにはapi/recordsのようになるので注意してください。


Route::apiResource('records', 'App\Http\Controllers\RecordAPIController');

APIの疎通テスト

これでAPIの開発が完了しました。実際に正常に動作するか確認していきます。今回は「Postman」を使用して疎通テストしていきます。

データベースが空の状態なので最初に新規登録を行います。新規登録はPOSTメソッドでhttp://localhost/oiwai/api/recordsにアクセスします。その際にbodyJSON形式でデータを渡します
oiwaiは私の環境構造上入っているだけなので抜いてください。

{
    "id": "fdasfdsfsadfsda",
    "name": "Birthday Gift"
}

これでSendボタンをクリックすると以下のようにステータスコード200で結果のJSONが取得できれば正常にデータがデータベースに蓄積されます。

【Laravel】API開発の流れ!データベースへのCRUD処理

データ一覧を取得したい場合はGETメソッドでhttp://localhost/oiwai/api/recordsにアクセスします。こちらも返り値でデータが全て取得できていれば成功です。

【Laravel】API開発の流れ!データベースへのCRUD処理

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index