ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
結論: 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 <select> を組み立てる
純粋 HTML 出力
// Controller
$options = Category::pluck('name', 'id')
->prepend('-- 選択してください --', '');
return view('items.create', compact('options'));{{-- Blade: items/create.blade.php --}}
<select name="category_id" class="form-control">
@foreach ($options as $value => $label)
<option value="{{ $value }}" @selected(old('category_id') == $value)>
{{ $label }}
</option>
@endforeach
</select>
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 => 'ペン'],
];<select name="item_id">
<option value="">-- 選択してください --</option>
@foreach ($groups as $groupLabel => $items)
<optgroup label="{{ $groupLabel }}">
@foreach ($items as $id => $name)
<option value="{{ $id }}">{{ $name }}</option>
@endforeach
</optgroup>
@endforeach
</select>
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)
<option value="{{ $cat->id }}">{{ $cat->name }}</option>
@empty
<option value="" disabled>カテゴリがありません</option>
@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 で先に組み立てた後ページング。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- インストールと設定
- クイックスタート & チュートリアル(初心者向け)
- クイックスタート & チュートリアル(中級者向け)
- ルーティング
- Bladeテンプレート(ビュー/レイアウト)
- コントローラー
- マイグレーションとテーブル定義
- データベースの設定
- Eloquentモデル (ORM)
- SQLとクエリビルダー
- バリデーション
- .envファイルの設定値へのアクセス
- 動作環境による分岐処理
- configフォルダ配下の設定値へのアクセス
- assetヘルパーを利用したpublicフォルダへのアクセス
- storageフォルダへのアクセス
- アプリケーション名の変更
- メンテナンス
- ログイン画面(認証システム)の作成
- ログインの必須化
- ログインユーザー情報の取得
- ルートの認証化
- 本番サーバーへのデプロイ方法
- 多言語化
- csrf_field
- ファイルのダウンロード
- CSVのアップロードおよび読み込み(maatwebsite/excel)
- ページタイトルの設定
- コマンド一覧
- エラー一覧
- SQLの実行ログ出力方法
- キャッシュのクリア
- Selectの結果の最初もしくは最後に任意の値を追加する方法
- ajaxでPOST通信する際の注意点
- ソーシャルログインの実装
- セッション情報の確認
- ログイン、ユーザー登録、パスワードリセット後のリダイレクト先の変更方法
- redirectやreturn viewにメッセージを付与する方法
- クッキー(cookie)の設定と取得
- クラスの再読み込み
- csrfの有効時間を変更する方法
- ViewComposerを用いてviewに共通の値を付与する方法
- View::shareを用いて共通の値を各ビューに渡す方法
- ミドルウェアを用いた処理の共通化
- Middleware内でAuth::check()などを使用する方法
- Controller以外でリダイレクトする方法
- セッションの値の取得/保存/更新/削除
- $requestの値を変更する方法
- 常時SSL化
- ページング(ページネーション)をする方法
- vue.jsとの連携
- Vue.jsと連携するSPA実行環境構築
- .envの値をvue.jsで参照する方法
- vue.jsを本番環境にリリースする方法
- could not find driver(Windows, MySQL編)
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?