初心者です。
Laravel-enumを使ってセレクトボックスにenumを使用しようとしています。
送信すると下記のようになります。
The key you have entered is invalid.
入力した値は無効だと言われます。
この人とやりたいことは似ているのですが上手くいきませんでした。
https://stackoverflow.com/questions/51198954/how-to-use-enum-values-in-select-option-in-laravel
blade
1 <div class="form-group col-md-6"> 2 <label for="exampleFormControlSelect1">人数</label> 3 <select class="form-control" name="number_of_people"> 4 @foreach($numberstatus as $key => $value) 5 <option value="{{$key}}">{{$value}}</option> 6 @endforeach 7 </select> 8 </div>
controller
1use App\Enums\NumberState; 2public function getSkiday() 3 { 4 $skiday = Skiday::all(); 5 6 $numberstatus = NumberState::toSelectArray(); 7 return view('calendar.getSkiday')->with(['skiday' => $skiday, 'numberstatus' => $numberstatus]); 8 }
migration
1$table->enum('number_of_people', NumberState::getValues());
NumberState
1<?php 2 3namespace App\Enums; 4 5use BenSampo\Enum\Enum; 6 7/** 8 * @method static static OptionOne() 9 * @method static static OptionTwo() 10 * @method static static OptionThree() 11 */ 12final class NumberState extends Enum 13{ 14 const Alone = 0; 15 const Few = 1; 16 const Many = 2; 17 18 public static function getDescription($value): string 19 { 20 switch($value) { 21 case self::Alone: 22 return '1人'; 23 break; 24 case self::Few: 25 return '2~5人'; 26 break; 27 case self::Many: 28 return '6人以上'; 29 break; 30 default: 31 return self::getKey($value); 32 } 33 } 34 35 public static function getValue(string $key) 36 { 37 switch($key) { 38 case '1人': 39 return 0; 40 case '2~5人': 41 return 1; 42 case '6人以上': 43 return 2; 44 default: 45 return self::getValue($key); 46 } 47 } 48}
自分ではどこに問題があるのかわかりませんでした。
どなたか知恵を貸していただきたいです。
php7.4.2
laravel6.18
よろしくおながいします。
追記
controller
1use Illuminate\Http\Request; 2 3use App\Facades\Calendar; 4use App\Services\CalendarService; 5use App\Skiday; 6use App\Http\Requests\CreateSkidayRequest; 7use Illuminate\Support\Facades\Auth; 8public function postSkiday(CreateSkidayRequest $request) 9 { 10 // dd($request); 11 $user = Auth::user(); 12 $skiday = new Skiday(); 13 $skiday->user_id = $user->id; 14 $skiday->day = $request->day; 15 $skiday->number_of_people = $request->number_of_people; 16 $skiday->ski_area = $request->ski_area; 17 $skiday->category = $request->category; 18 $skiday->time_zone = $request->time_zone; 19 $skiday->info = $request->info; 20 $skiday->save(); 21 22 return redirect()->route('calendar.show', ['skiday' => $skiday,]); 23 }
Request
1use App\Enums\NumberState; 2use Illuminate\Foundation\Http\FormRequest; 3use BenSampo\Enum\Rules\EnumKey; 4public function rules() 5 { 6 return [ 7 'day' => 'required|date|after::"now"', 8 'number_of_people' => 'required', 9 'ski_area' => 'required', 10 'category' => ['required', new EnumKey(NumberState::class)], 11 'time_zone' => 'required', 12 'info' => 'nullable', 13 ]; 14 } 15 16 public function attributes() 17 { 18 return [ 19 'day' => '日程', 20 'number_of_people' => '人数', 21 'ski_area' => '場所(スキー場、山)', 22 'category' => 'カテゴリー', 23 'time_zone' => '時間帯', 24 'info' => 'メモ', 25 ]; 26 }
web
1Route::get('/calendar/creat', 'CalendarController@getSkiday'); 2Route::post('/calendar/creat', 'CalendarController@postSkiday');
migration
1public function up() 2 { 3 Schema::create('skidays', function (Blueprint $table) { 4 $table->bigIncrements('id'); 5 $table->bigInteger('user_id')->unsigned(); 6 $table->date('day'); 7 $table->enum('number_of_people', NumberState::getValues()); 8 $table->string('ski_area'); 9 $table->string('category'); 10 $table->string('time_zone'); 11 $table->text('info')->nullable(); 12 $table->timestamps(); 13 14 $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); 15 }); 16 }