たけるのプログラミング

作ったものとか、気ままにアップします。

【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処理について
  1. モデルのインスタンスを生成
  2. そのインスタンスのパラメータに値を設定
  3. 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処理について
  1. all(https://laravel.com/api/6.x/Illuminate/Database/Eloquent/Model.html#method_all)を使い、全レコードを取得
  2. 値をviewに渡す
UPDATE処理について
  1. find(https://laravel.com/api/6.x/Illuminate/Database/Eloquent/Builder.html#method_find)でUPDATEしたいレコード(インスタンス)を取得する
  2. インスタンスのパラメータに値を設定
  3. 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処理について
  1. findでDELETEしたいレコード(インスタンス)を取得する
  2. delete(https://laravel.com/api/6.x/Illuminate/Database/Eloquent/Model.html#method_delete)を使い削除