2017-01-25 5 views
1

Как использовать optgroup с массивом в лезвии в laravel 5.3?Как использовать optgroup с массивом в лезвии в laravel

Я использую select2 в своем проекте.

Для примера:

<select class="form-control select2"> 
    <optgroup label="Top Airport"> 
    <option value="MHD">Mashhad</option> 
    <option value="THR">Tehran</option> 
    </optgroup> 
    <optgroup label="All Airport"> 
    <option value="MHD">Mashhad</option> 
    <option value="THR">Tehran</option> 
    <option value="LON">London</option> 
    . 
    . 
    . 
    </optgroup> 
</select> 

В Controller:

public function index() 
{ 
    $airport = Airport::where('status', 1)->pluck('city', 'iata'); 
    return view($this -> path_site_theme() . '.home.index', ['airport' => $airport]); 
} 

В index.blade.php:

{{ Form::select('from', ['Top Airport' => ['MHD', 'Mashhad', 'THR' => 'Tehran'], 'All Airport' => $airport], null, ['class' => 'form-control select2']) }} 
+0

В чем проблема? Is Form :: select() не дает вам ожидаемого результата? –

ответ

2

pluck метод возвращает экземпляр Collection в то время как Form::select() ожидает, что массив. Вы можете связать метод toArray() на pluck, чтобы он работал.

$airport = Airport::where('status', 1)->pluck('city', 'iata')->toArray(); 

Или лучше использовать коалесцирующий оператор, если вы используете PHP7. Он никогда не потерпит неудачу, даже если в базе данных нет активных аэропортов, что очень часто происходит с toArray(), когда он пытается преобразовать нуль в массив.

$airport = Airport::where('status', 1)->pluck('city', 'iata')->toArray() ?? [];