Laravel8でチェックボックスの値をテーブルに保存する方法

Laravel8でチェックボックスの値をテーブルに保存する方法

608 回閲覧されました

みなさんこんにちは、jonioです。

チェックボックスの値をテーブルに保存するのは簡単にできると思っていたのですがなぜか上手くいかなくて思いのほか苦労したので実装方法のメモとしてこの記事を残します。

バージョン

8を使っていますがコードの書き方が変わってないなら他のバージョンでも実装可能だと思います。

マイグレーションファイル

role_typesテーブルを作成しますがデータ型の設定は下記になります。

public function up()
{
  Schema::create('role_types', function (Blueprint $table) {
    $table->id();
    $table->string('role_type');
    $table->boolean('hidden')->default(false);
    $table->timestamps();
  });
}

6行目を使います、デフォルト値をfalseにしてチェックボックスに値を入れてtrueにします。

ルーティング(web.php)

下記になります。

Route::controller(RoleTypeController::class)->group(function(){
    Route::get('/roletype/index', 'index')->name('roletype.index');

    Route::get('/roletype/create', 'create')->name('roletype.create');

    Route::post('/roletype/store', 'store')->name('roletype.store');
});

モデル(RoleType.php)

下記になります。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class RoleType extends Model
{
    use HasFactory;

    protected $fillable = [
        'role_type',
        'hidden'
    ];

    function roleTypeStore($request){
        $role = $request->role_type;
        
        $hiddenFlag = $request->has('hidden') ? 1 : 0;

        RoleType::create([
            'role_type' => $role,
            'hidden' => $hiddenFlag
        ]);
    }
}

チェックボックスの値を取得しているのは20行目です。

「has(‘hidden’)」でチェックボックスにチェックが入っているかの判定をしてチェックが入っているなら値が1になりそうではない場合は0になります。

コントローラー(RoleTypeController.php)

下記になります、モデルに記述したメソッドを使っています。

public function store(RoleType $roletype, Request $request){
  $roletype->roleTypeStore($request);

  return redirect()->back()->with('message', '権限の設定をしました');
}

ビュー(create.blade.php)

下記になります。

<form method="POST" action="{{ route('roletype.store') }}" class="mt-5">
  @csrf
  <div class="mt-3">
    権限 : <input type="text" name="role_type" placeholder="管理者">
  </div>
  <div class="mt-3">
    存在させるか : <input type="checkbox" name="hidden" value="1">           
  </div>
  <input type="submit" value="登録する" class="block mt-4 btn-danger btn">
</form>

7行目ですが「value=”1″」にしないとチェックボックスにチェックを入れても1にならないみたいです。

これでチェックボックスを入れるページにアクセスすると下記になります。(今回はcssは掲載していないので同じ画面にならないと思います)

登録したMySQLのサンプルが下記ですが「存在させるか」の項目にチェックを入れた時が上でチェックを入れてない時が下になります。

これで完成です。