【Laravel】oldでありがちなミス!old()を使って、select、optionタグの値を保持したい!


こんにちは。今回は、Larvelでold()関数を使って、select、optionタグの値を保持する方法を紹介します。バージョンは、5.8です。

old()関数は、直前のデータを取得する便利なメソッドです。

公式ドキュメント↓
https://readouble.com/laravel/5.8/ja/requests.html

<input type="text" name="username" value="{{ old('username') }}">

old('POSTされた名前')で使うことができます。

old()を使って、select、optionタグの値を保持したい!

<select name="category_id">
  <option value="">選択されていません</option>
  <option type="text" value="1" @if(1 === (int)old('category_id')) selected @endif >PHP</option>
  <option type="text" value="2" @if(2 === (int)old('category_id')) selected @endif >Ryby</option>
</select>

optionタグの中の

@if(値 === (int)old('category_id') selected @endif

が保持してた値だけをselectedにすることで、保持した値を反映することができます。

なぜ、ここでold()関数の前に(int)をつけているかというと、old()関数が返す値は、自動的にString型になっているからです。もし、(int)をつけたくないのであれば、=====にして、型を指定しない方法にすればいいです。

DBに登録していたデータを表示させたい

先ほど紹介した内容のold()関数の第二引数に値を入れてあげると、デフォルトで指定した値にしてくれます。
こうすることで、初期画面は、DBから取得したデータがセレクトされ、変更した時、第一引数で指定した値にしてくれます。

@if(値 === (int)old('category_id', $old_category)) selected @endif

Laravelって便利ですよねー。
今回、紹介したold()関数は、String型で返してくるので、old()関数を使ったのに、選択されてないじゃないかという人もいたのではないでしょうか。僕も、その一人でしたが、原因調査をうまくできるようになっていきましょう