2
2

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 1 year has passed since last update.

Laravelのoldを配列で使いたいときの備忘録

Last updated at Posted at 2021-12-06

Laravelのバージョンは7.*を想定

例題

例えばPostモデルと、Tagモデルがあるとします。

PostとTagは多対多で成り立ちます。

Postの作成、編集画面で、Tagの一覧を表示して、チェックボックス等で紐づけを行いたいとき
バリデーション無視して書くと

create.blade.php
@foreach(\App\Models\Tag::get() as $tag)
  <label>
    <span>{{ $tag->name }}</span>
    <input type="checkbox" name="tags[]" value="{{ $tag->id }}">
  </label>
@endforeach

みたいな感じでformタグ内にぶち込めばいいんですよ。※bladeにモデル書いてるのはサンプルのため!

ただ、この場合、**配列の時のold関数ってどうだっけ?**ってよくなるので備忘録です。

結論

  1. インプットの配列に添え字を明示的に入れる
  2. old関数の引数として、文字列結合で添え字をドットでつなげる

そしてそのold関数で取得した値が、foreachで回している$tagidと同じであれば、checkedを付ける!

create.blade.php
@foreach(\App\Models\Tag::get() as $key => $tag)
  <label>
    <span>{{ $tag->name }}</span>
    <input type="checkbox" name="tags[{{ $key }}]" value="{{ $tag->id }}" @if(old('tags.' . $key) == $tag->id) checked="checked" @endif>
  </label>
@endforeach

明示的に書いてPOSTするので、バリデーションのリターンもしっかりついてる!

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?