LoginSignup
5
4

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-07-11

こんにちは。今回は、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()関数を使ったのに、選択されてないじゃないかという人もいたのではないでしょうか。僕も、その一人でしたが、原因調査をうまくできるようになっていきましょう:hear_no_evil:

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4