【Laravel】Modelクラスを利用したCRUD処理1人勉強会【PHP】
Modelについて
LaravelのEloquentというORMの仕組みにより、データベーステーブルに関連するモデルを作り、オブジェクトを操作する感覚でDB操作することができる。
今回はModelクラス(https://laravel.com/api/6.x/Illuminate/Database/Eloquent/Model.html#method_all)を利用して、CRUD処理(Create Read Update Delete)を実装する。
準備
今回用意したテーブル
php artisan make:migration create_lakers_table
tableの内容を定義したマイグレーションファイル
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateLakersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('lakers', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('lakers'); } }
マイグレーションする
php artisan migrate
ルーティング
//CREATE Route::get('laker/add','LakerController@add'); Route::post('laker/add','LakerController@create'); //READ Route::get('laker/','LakerController@index'); //UPDATE Route::get('laker/edit','LakerController@edit'); Route::post('laker/edit','LakerController@update'); //DELETE Route::get('laker/del', 'LakerController@delete'); Route::post('laker/del','LakerController@remove');
Modelを作成する
tableはlakersと複数形、modelは単数系にする。
php artisan make:model Laker
Controllerを作成する
php artisan make:controller LakerController
CRUDの処理
LakerController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Laker; class LakerController extends Controller { // CREATE処理 public function add(Request $request) { return view('laker.add'); } public function create(Request $request) { $laker = new Laker(); $laker->name = $request->name; $laker->save(); return redirect('/laker'); } // READ処理 public function index() { $lakers = Laker::all(); return view('laker.index',['lakers'=>$lakers]); } // UPDATE処理 public function edit(Request $request) { $laker = Laker::find($request->id); //dd($laker); return view('laker.edit',['laker'=>$laker]); } public function update(Request $request) { $laker = Laker::find($request->id); $laker->name = $request->name; $laker->save(); return redirect('/laker'); } // DELETE処理 public function delete(Request $request) { $laker = Laker::find($request->id); return view('laker.del',['laker'=>$laker]); } public function remove(Request $request) { Laker::find($request->id)->delete(); return redirect('/laker'); } }
CREATE処理について
- モデルのインスタンスを生成
- そのインスタンスのパラメータに値を設定
- saveを使い保存する(https://laravel.com/api/6.x/Illuminate/Database/Eloquent/Model.html#method_save)
※create(https://laravel.com/api/6.x/Illuminate/Database/Eloquent/Builder.html#method_create)を使う方法もある。
READ処理について
- all(https://laravel.com/api/6.x/Illuminate/Database/Eloquent/Model.html#method_all)を使い、全レコードを取得
- 値をviewに渡す
UPDATE処理について
- find(https://laravel.com/api/6.x/Illuminate/Database/Eloquent/Builder.html#method_find)でUPDATEしたいレコード(インスタンス)を取得する
- インスタンスのパラメータに値を設定
- saveで保存
※対象のカラムのレコードをUPDATEするには、update(https://laravel.com/api/6.x/Illuminate/Database/Eloquent/Model.html#method_update)を利用する。where(https://laravel.com/api/6.x/Illuminate/Database/Eloquent/Builder.html#method_where)を使わないと全てのレコードでUPDATEしてしまう。
DELETE処理について
- findでDELETEしたいレコード(インスタンス)を取得する
- delete(https://laravel.com/api/6.x/Illuminate/Database/Eloquent/Model.html#method_delete)を使い削除