質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.32%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

2回答

206閲覧

【Laravel】ドロップダウンリストに配列を表示したい

Java_student

総合スコア87

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2025/03/25 06:23

編集2025/03/25 16:57

実現したいこと

カテゴリー分けに人の登録を行い、違うカテゴリーへ変更を行う際にドロップダウンリストから全てのカテゴリーから選択できるようにして、カテゴリー変更したいのですが、取得した全てのカテゴリーの配列をドロップダウンリストにどのように表示させればいいのか分かりません。
selectタグで行う事は可能でしょうか?

該当のソースコード

resources/employees/show.blade.php

1<div class="form-plan"> 2 <x-input-label for="department" :value="__('カテゴリー変更')" /> 3 <select id="department_id" class="block mt-1 w-full" type="text" name="department_id"required autofocus autocomplete="department_id"> 4 @forelse ($departments as $department) 5 <option value="{{ $department->id }}">{{ $department->name }}</option> 6 @empty 7 @endforelse 8 </select> 9 </div> 10 11 <div class="flex items-center justify-end mt-4"> 12 <x-primary-button class="ms-4"> 13 変更 14 </x-primary-button> 15 </div>

補足情報(FW/ツールのバージョンなど)

Laravel 11

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

juner

2025/03/25 06:46 編集

公式ドキュメントを見た感じ、第二引数が options なのですが、何を元に無理と判断したのでしょうか?とても気になります。(ただし、 Laravel 公式の Form 自体は 4.x まで存在しており、11にはないです。 https://laravel.com/docs/4.2/html#drop-down-lists もしも `laravelcollective/html` を使っているのでしたら、公式ドキュメントはこれでしょうか? https://laravelcollective.com/docs/6.x/html#drop-down-lists
guest

回答2

0

おそらくForm::select()はLaravel Collectiveのことを言ってると思いますが、Laravel CollectiveはLaravel11以降は使えません

参考)
https://zenn.dev/pcs_engineer/articles/laravel-collective

@foreach @endforeachを使って自前で実装するか(けっこうめんどい)、Laravel Collectiveの移行先としてよく使われているspatie/laravel-htmlを導入して楽に実装するかのどちらかだと思います。

参考)
https://biz.addisteria.com/foreach_option_selected/
https://sibogli.hateblo.jp/entry/2023/10/20/211133

投稿2025/03/25 07:03

AbeTakashi

総合スコア4889

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

公式ドキュメントを見た感じ、第二引数が options なのですが、何を元に無理と判断したのでしょうか?とても気になります。
(ただし、 Laravel 公式の Form 自体は 4.2 まで存在しており、11.x にはないです。

Laravel 4.2

Laravel 4.2 の ドキュメントだと次の様にあります。

Drop-Down Lists

Generating A Drop-Down List

php

1echo Form::select('size', array('L' => 'Large', 'S' => 'Small'));

Generating A Drop-Down List With Selected Default

php

1echo Form::select('size', array('L' => 'Large', 'S' => 'Small'), 'S');

Generating A Grouped List

php

1echo Form::select('animal', array( 2 'Cats' => array('leopard' => 'Leopard'), 3 'Dogs' => array('spaniel' => 'Spaniel'), 4));

https://laravel.com/docs/4.2/html#drop-down-lists

laravelcollective/html

もしも laravelcollective/html を使っているのでしたら、公式ドキュメントはこれでしょうか?
※ただし、 laravelcollective/html 自体は最新版は廃止扱いみたいですね。

Drop-Down Lists

Generating A Drop-Down List

php

1echo Form::select('size', ['L' => 'Large', 'S' => 'Small']);

Generating A Drop-Down List With Selected Default

php

1echo Form::select('size', ['L' => 'Large', 'S' => 'Small'], 'S');

Generating a Drop-Down List With an Empty Placeholder
This will create an <option> element with no value as the very first option of your drop-down.

php

1echo Form::select('size', ['L' => 'Large', 'S' => 'Small'], null, ['placeholder' => 'Pick a size...']);

Generating A Grouped List

php

1echo Form::select('animal',[ 2 'Cats' => ['leopard' => 'Leopard'], 3 'Dogs' => ['spaniel' => 'Spaniel'], 4]);

https://laravelcollective.com/docs/6.x/html#drop-down-lists

blade template

また、単に select タグを blade template に書くのであれば Laravel に下記の記述があります。

Likewise, the @selected directive may be used to indicate if a given select option should be "selected":

php

1<select name="version"> 2 @foreach ($product->versions as $version) 3 <option value="{{ $version }}" @selected(old('version') == $version)> 4 {{ $version }} 5 </option> 6 @endforeach 7</select>

https://laravel.com/docs/11.x/blade#additional-attributes

spatie/laravel-html

laravel: laravelcollective/html から spatie/laravel-html に引っ越す に下記の記述がありました。

select のグルーピング

laravelcollective/html では select() へネストにしたコレクション([string => Collection])を渡せば勝手に optgroup を作ってくれましたが、

spatie はコレクションが渡されても optgroup にしてくれません。

結論から言えば、コレクションを配列に変換したものを第二引数に渡しましょう。

{{ html() ->select('area_manager_id', $areaManagers->toArray()) }}

コレクションではダメな理由

第二引数に渡した配列の値が is_array() を条件として optgroup を作るかどうかを判定しているからです。

php

1public function options($options) 2{ 3 return $this->addChildren($options, function ($text, $value) { 4 if (is_array($text)) { 5 return $this->optgroup($value, $text); 6 }

とあり、次のパターンでいけると思われます。

{{ html()->select($name, $options) }}

以上。

追伸

配列の特定値だけ一番上にする方法

例えばこんな感じでいけませんでしょうか?

php

1<?php 2$departments = [(object)[ 3 'id' => 'A', 4 'name' => 'ANAME' 5],(object)[ 6 'id' => 'B', 7 'name' => 'BNAME', 8],(object)[ 9 'id' => 'C', 10 'name' => 'CNAME', 11], (object)[ 12 'id' => 'E', 13 'name' => 'ENAME', 14] 15, (object)[ 16 'id' => 'D', 17 'name' => 'DNAME', 18]]; 19$top = 'B'; 20usort($departments, function($arg1, $arg2) use ($top) { 21 if ($arg1->id == $top) return -1; 22 if ($arg2->id == $top) return 1; 23 return 0; 24}); 25 26echo var_export($departments, true);

playground

投稿2025/03/25 06:52

編集2025/03/26 00:10
juner

総合スコア742

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Java_student

2025/03/25 07:48 編集

下記でドロップダウンリストに表示することに成功しましたが、一番上に現在のカテゴリーが来るようにhしたいのですが、方法はありますでしょうか? <div class="form-plan"> <x-input-label for="department" :value="__('カテゴリー変更')" /> <select id="department_id" class="block mt-1 w-full" type="text" name="department_id"required autofocus autocomplete="department_id"> @forelse ($departments as $department) <option value="{{ $department->id }}">{{ $department->name }}</option> @endforelse </select> </div>
juner

2025/03/25 08:25

ソースを書くなら質問文に追記してほしいところですが、それなら $departments をソートしたらいいのではないでしょうか……? ソート方法について回答に追記しました。
Java_student

2025/03/25 16:57

ドロップダウンリストの箇所のページのコードを追記しました。
juner

2025/03/26 00:11

@student そちらのblade template のコードで使っている型に合わせてソートを書き直しました。ご確認ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.32%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問