質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Blade

Bladeとは、 PHPフレームワークのLaravelで使用することができるテンプレートエンジンです。テンプレートの継承とエスケープ機能を提供します。

Q&A

1回答

2315閲覧

laravelのenumでThe key you have entered is invalidが出てしまう

tenlife

総合スコア70

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Blade

Bladeとは、 PHPフレームワークのLaravelで使用することができるテンプレートエンジンです。テンプレートの継承とエスケープ機能を提供します。

0グッド

0クリップ

投稿2020/03/31 22:19

編集2020/04/02 22:09

初心者です。

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 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mix-peach

2020/04/01 03:54

提示コードにはこれといった問題が見当たらないと思うのですが、実際にエラーが出るのはどの部分ですか?
tenlife

2020/04/02 00:22

セレクトボックスから選択した後に送信すると、The key you have entered is invalid.と表示されてしまいます。送信した時に出るということは、データの型などに問題があるのでしょうか?
mix-peach

2020/04/02 07:06

処理を見てみないことにはわからないので、送信後のエラーが出ている近辺のコードはご提示いただけますか?
tenlife

2020/04/02 22:11 編集

返信が遅くなり申し訳ないです。 処理の部分を記載しました。
guest

回答1

0

FormRequestで、

new EnumKey(NumberState::class)

のルールを適用するべき対象が、

categoryではなくnumber_of_peopleなのではないかと思います。

投稿2020/04/03 00:51

mix-peach

総合スコア1910

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tenlife

2020/04/04 00:18

回答ありがとうございます。キャッシュなどもクリアしてから試してみましたが、同じエラーが出てきました。またnumber_of_peopleの保存に関する記述を消すと上手くいくので、他のコードには関係なさそうです。。。
mix-peach

2020/04/06 00:53

あらま?? 「number_of_peopleの保存に関する記述を消すと上手くいく」とは、 contoller@postSkidayの、 $skiday->number_of_people = $request->number_of_people; をコメントにすると、とかでしょうか? なのであれば、エラー発生時のDB登録で発行されているクエリも確認してもらえますか? それと、今更で申し訳ないですが、エラー文をもう少し詳しく載せてもらえますか?(この1行だけではないと思うので)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問