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

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

この記事の要点
  • 先頭に追加: $collection->prepend($value, $key)
  • 末尾に追加: $collection->push($value) または put($key, $value)
  • 結合: $collection->concat([...]) / merge([...])
  • HTML

結論: select 用配列の作り方

Laravel で を組み立てる

純粋 HTML 出力

// Controller
$options = Category::pluck('name', 'id')
    ->prepend('-- 選択してください --', '');

return view('items.create', compact('options'));
{{-- Blade: items/create.blade.php --}}

Laravel Collective Form 利用時

{{-- composer require laravelcollective/html --}}
{!! Form::select('category_id', $options, old('category_id'), [
    'class' => 'form-control',
]) !!}

{{-- $options は連想配列 / Collection どちらも可 --}}

optgroup(分類された select)

// 親子構造で送る
$groups = [
    '食品' => [1 => 'パン', 2 => '米'],
    '雑貨' => [3 => 'ノート', 4 => 'ペン'],
];

Eloquent + Collection の合わせ技

use App\Models\Prefecture;

// 都道府県の select オプション(先頭に空欄)
$prefs = Prefecture::orderBy('code')
    ->pluck('name', 'code')
    ->prepend('-- 選択してください --', '');

// 「その他」を末尾に追加
$prefs->put('99', 'その他');

// 結果
// ['' => '-- 選択してください --',
//  '01' => '北海道', '02' => '青森県', ..., '47' => '沖縄県',
//  '99' => 'その他']

@forelse で「データなし」のとき

{{-- データが空のときは「カテゴリがありません」を表示 --}}
@forelse ($categories as $cat)
    
@empty
    
@endforelse

キーを文字列で揃えるテクニック

HTML form の value は常に文字列で送られるため、id を数値で持っていると old() の比較に == が必要です。型を揃えると安心:

$options = Category::pluck('name', 'id')
    ->mapWithKeys(fn ($name, $id) => [(string)$id => $name])
    ->prepend('-- 選択してください --', '');

FAQ

Q: 配列のまま末尾に値を追加したい
A: PHP 配列なら $arr[] = $value で末尾追加、array_unshift($arr, $value) で先頭追加。Collection に変換せず素のままでも可。

Q: prepend のキーが 0'' で被ったらどうなる?
A: 既存キーが上書きされます。意図しないなら明示的にユニークキー('__placeholder__' 等)を指定。

Q: select の選択値を保持したい (old())
A: @selected(old('category_id') == $value) または{{ Form::select(..., old('category_id') ?? $model->category_id, ...) }}。型に注意。

Q: ページネーション結果に「全件」を追加したい
A: ページネーションオブジェクトは Collection ではないので、->items() で配列を取り出してから操作するか、Collection で先に組み立てた後ページング。