Я хочу создать поле выбора, подобное приведенному ниже, используя illuminate\html:
<select>
<option value="$item->id">$item->name</option>
<option value="$item->id">$item->name</option>
</select>
В моем контроллере я попробовал это:
public function create()
{
$items = Items::all(['id', 'name']);
return view('prices.create', compact('id', 'items'));
}
И, на мой взгляд, это:
<div class="form-group">
{!! Form::Label('item', 'Item:') !!}
{!! Form::select('item_id', $items, null, ['class' => 'form-control']) !!}
</div>
Проблема заключается в том, что вместо $item->name
отображается вся информация объекта.
Laravel предоставляет построитель запросов с функцией lists()
В вашем случае вы можете заменить свой код
$items = Items::all(['id', 'name']);
с
$items = Items::lists('name', 'id');
Кроме того, вы можете связать его с другим Query Builder.
$items = Items::where('active', true)->orderBy('name')->lists('name', 'id');
источник: http://laravel.com/docs/5.0/queries#selects
Обновление для Laravel 5.2
Большое спасибо @jarry. Как вы упомянули, функция Laravel 5.2 должна быть
$items = Items::pluck('name', 'id');
или
$items = Items::where('active', true)->orderBy('name')->pluck('name', 'id');
ref: https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0 - посмотрите списки исключений
Просто измените ваш контроллер на следующее:
public function create()
{
$items = Subject::all(['id', 'name']);
return View::make('your view', compact('items',$items));
}
И ваш взгляд на:
<div class="form-group">
{!! Form::Label('item', 'Item:') !!}
<select class="form-control" name="item_id">
@foreach($items as $item)
<option value="{{$item->item_id}}">{{$item->id}}</option>
@endforeach
</select>
</div>
Надеюсь, что это решит вашу проблему.
Laravel >= 5.3 список методов() устарел использовать pluck()
$items = Items::pluck('name', 'id');
{!! Form::select('items', $items, null, ) !!}
Это даст вам поле выбора с теми же параметрами выбора, что и номера идентификаторов в DB
например, если вы указали это в своей таблице DB:
id name
1 item1
2 item2
3 item3
4 item4
в поле выбора это будет как
<select>
<option value="1">item1</option>
<option value="2">item2</option>
<option value="3">item3</option>
<option value="4">item4</option>
</select>
Я узнал, что pluck теперь возвращает коллекцию, и вам нужно добавить → toArray() в конец pluck... так вот так: pluck('name', 'id')->toArray();
@foreach($elements as $element_each)<option value="{!! $element_each->id !!}">{!! $element_each->name !!}</option>@endforeach
выдает ошибку.
контроллер
$campaignStatus = Campaign::lists('status', 'id');
compact ('campaignStatus') приведет к [id = > status];//пример [1 = > 'pending']
return view('management.campaign.index', compact('campaignStatus'));
Просмотр
{!! Form::select('status', $campaignStatus, array('class' => 'form-control')) !!}
Использовать массив Laravel для Form::select
. Поэтому я передал массив, как показано ниже:
$datas = Items::lists('name', 'id');
$items = array();
foreach ($datas as $data)
{
$items[$data->id] = $data->name;
}
return \View::make('your view', compact('items',$items));
На ваш взгляд:
<div class="form-group">
{!! Form::label('item', 'Item:') !!}
{!! Form::select('item_id', $items, null, ['class' => 'form-control']) !!}
</div>
В вашем контроллере добавьте
public function create()
{
$items = array(
'itemlist' => DB::table('itemtable')->get()
);
return view('prices.create', $items);
}
И, на ваш взгляд, используйте
<select name="categories" id="categories" class="form-control">
@foreach($itemlist as $item)
<option value="{{ $item->id }}">{{ $item->name }}</option>
@endforeach
</select>
В поле выбора это будет так:
<select>
<option value="1">item1</option>
<option value="2">item2</option>
<option value="3">item3</option>
...
</select>
Laravel 5.3 использует pluck ($ value, $key)
$value отображается в вашем списке, а ключ $id
контроллер
$products = Product::pluck('name', 'id');
return view('main.index', compact('products'));
вид
{{ Form::select('id', $products, null, ['class' => 'form-control']) }}
Laravel 5. *
В вашем контроллере:
$items= Items::pluck('name', 'id')->toArray();
return view('your view', compact('items', $items));
На ваш взгляд:
{{ Form::select('organization_id', $items, null, []) }}
Для Laravel 5:
$items = Items::lists('name', 'id');
Нажмите элемент в начале коллекции.
$items->prepend($value, $key = null);
Попробуйте это. Без использования контроллера
{{Форма:: select ('apartment_id',\App\Apartment:: all() → pluck ('apartment_name', 'apartment_id') → toArray(), null, ['class' = > ' select2 form-control ',' multiple '= > ' multiple '])}}
lists
устарели в пользуpluck
. в вашем примере это будутItems::all(['id', 'name'])->pluck('name', 'id');
@foreach($items as $items_each)<option value="{!! $items_each->id !!}">{!! $items_each->name !!}</option>@endforeach
без использования классаForm
, например,@foreach($items as $items_each)<option value="{!! $items_each->id !!}">{!! $items_each->name !!}</option>@endforeach