公式ドキュメントを見た感じ、第二引数が 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