概要
例えばキャラクター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
する
(書いたはいいが記事に登場する職業の設定などはほとんど関係がなかった)。