この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:5
ページ更新者:guest
更新日時:2026-06-11 07:29:05

タイトル: Selectの結果の最初もしくは最後に任意の値を追加する方法
SEOタイトル: Laravel コレクション先頭/末尾追加完全ガイド|select 結果に「選択してください」を加える

この記事の要点
  • 先頭に追加: $collection->prepend($value, $key)
  • 末尾に追加: $collection->push($value) または put($key, $value)
  • 結合: $collection->concat([...]) / merge([...])
  • HTML <select> の先頭に「選択してください」を入れる定番パターン
  • Eloquent + Collection で連想配列 (id => name) を作るときは pluck()prepend()

結論: select 用配列の作り方

Laravel で <select> のオプション一覧を作るとき、先頭に「選択してください」のような空オプションを入れたいケースは頻出。コレクションの prepend() を使うのが定石です:

use App\Models\Category;

// id => name の連想配列を取得
$categories = Category::pluck('name', 'id');
// [1 => '雑貨', 2 => '食品', 3 => '家電']

// 先頭に「選択してください」を追加
$options = $categories->prepend('-- 選択してください --', '');
// ['' => '-- 選択してください --', 1 => '雑貨', 2 => '食品', 3 => '家電']

// Blade で使う
// {{ Form::select('category_id', $options, null, ['class' => 'form-control']) }}

Collection の追加系メソッド一覧

メソッド位置キー指定
prepend($value, $key = null)先頭$c->prepend('A', 0)
push($value)末尾不可(自動採番)$c->push('Z')
put($key, $value)末尾(または上書き)必須$c->put('z', 'Z')
add($value)末尾不可$c->add('Z')
concat($source)末尾に結合キー振り直し$c->concat([10, 20])
merge($items)末尾結合(キー保持)同キーは上書き$c->merge(['a' => 1])
union($items)末尾結合(既存優先)同キーは無視$c->union(['a' => 9])

prepend の使い方

use Illuminate\Support\Collection;

$c = collect([1 => 'A', 2 => 'B', 3 => 'C']);

// キー指定なし(自動で 0 番)
$c->prepend('Z');
// [0 => 'Z', 1 => 'A', 2 => 'B', 3 => 'C']

// キー指定あり
$c->prepend('Z', 'zero');
// ['zero' => 'Z', 1 => 'A', 2 => 'B', 3 => 'C']

// 空文字キーで select 用先頭に
$c->prepend('選択してください', '');
// ['' => '選択してください', 1 => 'A', 2 => 'B', 3 => 'C']

push / put / add の違い

$c = collect(['a' => 1, 'b' => 2]);

// push : 末尾に追加。キー指定不可(連番)
$c->push(99);
// ['a' => 1, 'b' => 2, 0 => 99]

// add : push と同等(メソッド名違いの別名)
$c->add(99);

// put : キー指定必須。同じキーがあれば上書き
$c->put('c', 3);
// ['a' => 1, 'b' => 2, 'c' => 3]

$c->put('a', 999);  // 上書き
// ['a' => 999, 'b' => 2, ...]

concat / merge / union の違い

$a = collect(['x' => 1, 'y' => 2]);
$b = ['y' => 20, 'z' => 30];

// concat : キーを振り直して結合
$a->concat($b);
// [0 => 1, 1 => 2, 2 => 20, 3 => 30]

// merge : キー保持、同キーは引数側で上書き
$a->merge($b);
// ['x' => 1, 'y' => 20, 'z' => 30]

// union : キー保持、同キーは元側を優先
$a->union($b);
// ['x' => 1, 'y' => 2, 'z' => 30]

HTML