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

Laravel 7.x

ぬにょす(挨拶)。

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

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

スポンサーリンク

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

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

php artisan make:model -a --api Category
Code language: plaintext (plaintext)

-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(); });
Code language: PHP (php)

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

php artisan migrate
Code language: plaintext (plaintext)

モデル

7.x Eloquent:利用の開始 Laravel

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

app/Category.php
class Category extends Model { protected $guarded = [ 'id', 'created_at', 'updated_at', ]; }
Code language: PHP (php)

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

コントローラー

index / 全件表示

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

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

store / INSERT処理

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

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

update / UPDATE処理

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

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

destroy /DELETE処理

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

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

ルーティング

7.x コントローラ Laravel

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

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

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

まとめ

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

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

コメント

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