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é.

38
demandé sur borracciaBlu 2015-04-08 10:17:38

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

77
répondu mininoz 2016-03-05 17:12:44

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();

19
répondu lewis4u 2017-04-01 18:36:08

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

16
répondu Sohel0415 2015-04-08 07:38:38

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')) !!}
7
répondu user2592890 2015-11-13 14:56:08

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>
5
répondu Naing Win 2015-04-08 08:23:16

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>
5
répondu BIBIN K ONANKUNJU 2017-03-27 06:34:00

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, []) }}
3
répondu Dominic Tan 2017-01-12 13:42:09

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']) }}
3
répondu Gaetano 2017-05-16 10:45:17

Pour Laravel 5:

$items = Items::lists('name', 'id');

Pousser un article sur le début de la collection.

$items->prepend($value, $key = null);
2
répondu 3ehrang 2016-03-15 15:59:07

j'ai ajouté toArray() après pluck

$items = Item::get()->pluck('name', 'id')->toArray();

{{ Form::select('item_id', [null=>'Please Select'] + $items) }}
2
répondu Gediminas 2018-07-13 11:35:45

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']) }}

0
répondu Vinayak 2017-01-27 09:58:19

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

0
répondu Dawood Iddris 2018-08-28 23:13:08

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

0
répondu hamidreza ghanbari 2018-09-03 09:54:58