Laravel-5 Comment remplir la boîte de sélection de la base de données avec la valeur d'id et la valeur de nom
je veux créer une zone de sélection comme celle ci-dessous en utilisant illuminerhtml:
php prettyprint-override"><select>
<option value="$item->id">$item->name</option>
<option value="$item->id">$item->name</option>
</select>
Dans mon contrôleur, j'ai essayé ceci:
public function create()
{
$items = Items::all(['id', 'name']);
return view('prices.create', compact('id', 'items'));
}
Et à mon avis, ceci:
<div class="form-group">
{!! Form::Label('item', 'Item:') !!}
{!! Form::select('item_id', $items, null, ['class' => 'form-control']) !!}
</div>
Le problème est qu'au lieu de $item->name
affiche toutes les informations de l'entité.
13 réponses
Laravel fournit un constructeur de requêtes avec la fonction lists ()
Dans votre cas, vous pouvez remplacer votre code
$items = Items::all(['id', 'name']);
$items = Items::lists('name', 'id');
vous pouvez aussi l'enchaîner avec un autre constructeur de requêtes.
$items = Items::where('active', true)->orderBy('name')->lists('name', 'id');
source:http://laravel.com/docs/5.0/queries#selects
mise à jour pour Laravel 5.2
Merci beaucoup @jarry. Comme vous l'avez mentionné, l' fonction pour Laravel 5.2 devrait être
$items = Items::pluck('name', 'id');
ou
$items = Items::where('active', true)->orderBy('name')->pluck('name', 'id');
ref: https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0 -- regardez Désapprobations listes
Laravel >= 5.3 méthode de listes() est obsolète utiliser pluck()
$items = Items::pluck('name', 'id');
{!! Form::select('items', $items, null, ) !!}
cela vous donnera une boîte de sélection avec les mêmes options de sélection que les numéros d'identification dans DB
par exemple, si vous avez cela dans votre base de données de la table:
id name
1 item1
2 item2
3 item3
4 item4
dans la boîte de sélection, il sera comme ceci
<select>
<option value="1">item1</option>
<option value="2">item2</option>
<option value="3">item3</option>
<option value="4">item4</option>
</select>
j'ai découvert que d'arracher maintenant retourne une collection, et vous devez ajouter ->toArray() à la fin de l'arracher...donc comme ceci: pluck('name', 'id')->toArray();
changez simplement votre controller en:
public function create()
{
$items = Subject::all(['id', 'name']);
return View::make('your view', compact('items',$items));
}
Et votre point de vue:
<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>
J'espère que cela va résoudre votre problème
Controller
$campaignStatus = Campaign::lists('status', 'id');
compact('campaignStatus') [id=>status]; //exemple [1 => 'en attente']
return view('management.campaign.index', compact('campaignStatus'));
View
{!! Form::select('status', $campaignStatus, array('class' => 'form-control')) !!}
Laravel utiliser Tableau pour Form::select
. Donc j'ai passé tableau comme ci-dessous:
$datas = Items::lists('name', 'id');
$items = array();
foreach ($datas as $data)
{
$items[$data->id] = $data->name;
}
return \View::make('your view', compact('items',$items));
selon vous:
<div class="form-group">
{!! Form::label('item', 'Item:') !!}
{!! Form::select('item_id', $items, null, ['class' => 'form-control']) !!}
</div>
Dans votre contrôleur, ajouter
public function create()
{
$items = array(
'itemlist' => DB::table('itemtable')->get()
);
return view('prices.create', $items);
}
Et à votre avis, utiliser
<select name="categories" id="categories" class="form-control">
@foreach($itemlist as $item)
<option value="{{ $item->id }}">{{ $item->name }}</option>
@endforeach
</select>
Dans la boîte de sélection, il sera comme ceci,
<select>
<option value="1">item1</option>
<option value="2">item2</option>
<option value="3">item3</option>
...
</select>
Laravel 5.*
Dans votre contrôleur:
$items= Items::pluck('name', 'id')->toArray();
return view('your view', compact('items', $items));
À votre avis:
{{ Form::select('organization_id', $items, null, []) }}
Laravel 5.3 utiliser pluck ($value, $ key )
$valeur s'affiche dans la liste déroulante et $key est id
controller
$products = Product::pluck('name', 'id');
return view('main.index', compact('products'));
view
{{ Form::select('id', $products, null, ['class' => 'form-control']) }}
Pour Laravel 5:
$items = Items::lists('name', 'id');
Pousser un article sur le début de la collection.
$items->prepend($value, $key = null);
j'ai ajouté toArray()
après pluck
$items = Item::get()->pluck('name', 'id')->toArray();
{{ Form::select('item_id', [null=>'Please Select'] + $items) }}
Essayer celui-ci. Sans utiliser le contrôleur
{{ Form::select('apartment_id', \App\de l'Appartement::all()->arracher('apartment_name', 'apartment_id')->toArray(), null,['class'=>'select2 form-control', 'multiple'=>'plusieurs']) }}
beaucoup a déjà été dit mais gardez à l'esprit qu'il y a des moments où u ne veut pas sortir tous les enregistrements de la base de données dans votre champ d'entrée select ..... Exemple clé j'ai travaillé sur ce site de gestion d'école où je dois sortir toutes les catégories de tableau d'affichage dans une déclaration select. De mon contrôleur c'est le code que j'ai écrit
panneau d'affichage:: groupBy()->arracher('category')->get();
de cette façon u obtenir le dossier distinct comme ils ont été groupés de façon à ne pas répéter les enregistrements
dans laravel 5.6 vous pouvez utiliser $request->nameofselectbox
pour obtenir la valeur de l'option
et utiliser $request->input('nameofselectbox')
pour obtenir le titre qui montrent dans l'option