Laravelやってみる#8―API経由でのCRUD

Laravel 7.x

ぬにょす(挨拶)。

表題の通りですが、PHPフレームワークであるところのLaravelを使ってみようということで、やったこと・できたこと・できなかったこと等を自分の備忘録として残していきます。

#8の今回はLaravelのVueフロントエンドからAPI経由で基本的なCRUDを実装してみます。なお、話を簡単にするため認証ガードなどの余計なミドルウェアは挟みません。

モデルとコントローラーの作成

artisanコマンドで一気に作ります。

php artisan make:model -a --api Category

-a オプションを付与することでコントローラーやマイグレーションファイルなども作成します。–api オプションを付与することでフォーム出力用のアクション(create, edit)を省いたコントローラーを作成します。

マイグレーション

データベース:マイグレーション 7.x Laravel

マイグレーション用のファイル(database/migrations/YYYY_MM_DD_hhmmss_create_categories_table.php)が作成されているので、テーブル作成処理を追加します。

    Schema::create('categories', function (Blueprint $table) {
      $table->id();
      /*追加*/$table->string('name');
      $table->timestamps();
    });

artisan コマンドでマイグレーションを実行します。

php artisan migrate

モデル

Eloquent:利用の開始 7.x Laravel

複数代入を利用するために、カラムに関する制約を追加します。

app/Category.php
class Category extends Model
{
  protected $guarded = [
    'id',
    'created_at',
    'updated_at',
  ];
}

$fillable プロパティで代入を許可するカラムを指定する方法と、$guarded プロパティで代入を禁止するカラムを指定する方法があります。今回は後者でやってみました。

コントローラー

index / 全件表示

app/Http/Controllers/CategoryController.php
  public function index()
  {
    return Category::all();
  }

モデルの all メソッドの結果をそのまま返します。

store / INSERT処理

app/Http/Controllers/CategoryController.php
  public function store(Request $request)
  {
    $category = new Category($request->all());
    $category->save();
    return response()->json();
  }

リクエストされたデータでモデルを作成し、保存します。

update / UPDATE処理

app/Http/Controllers/CategoryController.php
  public function update(Request $request, Category $category)
  {
    $category->fill($request->all())->save();
    return response()->json();
  }

モデルをリクエストデータで更新して、保存します。

destroy /DELETE処理

app/Http/Controllers/CategoryController.php
  public function destroy(Category $category)
  {
    $category->delete();
    return response()->json();
  }

モデルの delete メソッドで削除します。

ルーティング

コントローラ 7.x Laravel

APIルートを追加します。コントローラーを artisan コマンドで作成したので、Route::apiResources メソッドを呼ぶだけで完了です。

routes/api.php
Route::apiResources([
  'category' => 'CategoryController',
]);

php artisan route:list コマンドで Method と URI を確認し、Postman などから実行してみるとデータベースが更新されるはずです。

まとめ

artisan コマンドや Route::apiResource(s) メソッドなど、Laravel フレームワークが提供する機能を活用することで、最低限の機能は簡単に実装することができました。

実際にはバリデーションや例外処理、ルート保護なども必要になってくるでしょう。残念ながら私にはまだそこまでの知識はありません。もっとドキュメントを読んで、トライ&エラーを繰り返して、分かったことが増えてきたら備忘録として投稿したいと思います。

コメント

タイトルとURLをコピーしました