6
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Laravel】foreachで回したセレクトボックスの初期値を変数で設定する

Last updated at Posted at 2020-09-07

概要

例えばキャラクターAの職業を変更したいと仮定する。編集ボタンを押すとキャラクターAの情報が表示され、職業はセレクトボックスで選択できる。セレクトボックスの中身は foreach を使って、コントローラから持ってきた職業一覧である $jobs の中身を表示するが、その初期値をキャラクターAの変更前の職業である 戦士 にしたい。

リレーション

  • charactersテーブルjobsテーブルがある。
  • charactersテーブルには jobs_id というインデックスがあり、リレーションを組んでいる。
  • jobsテーブルの name カラムには職業が入っている。魔術師とか竜騎士とか(まあなんでもいい)。セレクトボックスにはこの職業が羅列されることになる

セレクトボックス

基本として、これでセレクトボックスに『jobsテーブルに入っている職業』が羅列される。

edit.blade.php
<div class="">
  <select name="job_id">
    @foreach($jobs as $job)
      <option value="{{ $job->id }}">{{ $job->name }}</option>
    @endforeach
  </select>
</div>

デフォルト値の設定

コントローラからキャラクターの職業を持ってくる
(職業一覧、キャラクターの情報などを取得する部分、渡すべき変数でこの記事に関係ないものは省略する)。

CharacterController.php
$character_job = $character->job->character_name;

return view('character.edit')
  // 中略
  ->with('jobs', $jobs)
  ->with('character_job', $character_job);

あとはセレクトボックスの記述を修正する。

edit.blade.php
<div class="">
  <select name="job_id">
    @foreach($jobs as $job)
      @if ($job->name === $character_job)
        <option value="{{ $job->id }}" selected="selected">{{ $job->name }}</option>
      @else
        <option value="{{ $job->id }}">{{ $job->name }}</option>
      @endif
    @endforeach
  </select>
</div>

**「セレクトボックスの職業とキャラクターの職業が一致する場合」**で selected する
(書いたはいいが記事に登場する職業の設定などはほとんど関係がなかった)。

6
10
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
6
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?