Je veux créer une boîte de sélection comme celle ci-dessous en utilisant illuminate\html :
<select>
<option value="$item->id">$item->name</option>
<option value="$item->id">$item->name</option>
</select>
J'ai essayé ceci dans mon contrôleur:
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é.
Laravel fournit un constructeur de requêtes avec la fonction lists ()
Dans votre cas, vous pouvez remplacer votre code
$items = Items::all(['id', 'name']);
avec
$items = Items::lists('name', 'id');
En outre, vous pouvez également le chaîner avec un autre générateur 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é, la fonction de 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. - consultez les listes de vétustes
Laravel> = 5.3 method lists () est obsolète, utilisez pluck()
$items = Items::pluck('name', 'id');
{!! Form::select('items', $items, null, ) !!}
Cela vous donnera une zone de sélection avec les mêmes options de sélection que les numéros d'identification dans DB.
par exemple, si vous avez ceci dans votre table de base de données:
id name
1 item1
2 item2
3 item3
4 item4
dans la boîte de sélection, ce sera comme ça
<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 pluck renvoie maintenant une collection, et vous devez ajouter -> toArray () à la fin de pluck ... donc comme ceci: pluck('name', 'id')->toArray();
Il suffit de changer votre contrôleur comme suit:
public function create()
{
$items = Subject::all(['id', 'name']);
return View::make('your view', compact('items',$items));
}
Et votre vue sur:
<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 résoudra votre problème
contrôleur
$campaignStatus = Campaign::lists('status', 'id');
compact ('campaignStatus') donnera le résultat [id => status]; // exemple [1 => 'en attente']
return view('management.campaign.index', compact('campaignStatus'));
Voir
{!! Form::select('status', $campaignStatus, array('class' => 'form-control')) !!}
Dans votre contrôleur, ajoutez,
public function create()
{
$items = array(
'itemlist' => DB::table('itemtable')->get()
);
return view('prices.create', $items);
}
Et à votre avis, utilisez
<select name="categories" id="categories" class="form-control">
@foreach($itemlist as $item)
<option value="{{ $item->id }}">{{ $item->name }}</option>
@endforeach
</select>
Dans la zone de sélection, ce sera comme ça,
<select>
<option value="1">item1</option>
<option value="2">item2</option>
<option value="3">item3</option>
...
</select>
Laravel utilise array pour Form::select
. J'ai donc 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));
A votre avis:
<div class="form-group">
{!! Form::label('item', 'Item:') !!}
{!! Form::select('item_id', $items, null, ['class' => 'form-control']) !!}
</div>
Laravel 5.3 utilise pluck ($ value, $ key)
La valeur $ est affichée dans votre liste déroulante et $ key est id
contrôleur
$products = Product::pluck('name', 'id');
return view('main.index', compact('products'));
vue
{{ Form::select('id', $products, null, ['class' => 'form-control']) }}
J'ai ajouté toArray()
après pluck
$items = Item::get()->pluck('name', 'id')->toArray();
{{ Form::select('item_id', [null=>'Please Select'] + $items) }}
Laravel 5. *
Dans votre contrôleur:
$items= Items::pluck('name', 'id')->toArray();
return view('your view', compact('items', $items));
A votre avis:
{{ Form::select('organization_id', $items, null, []) }}
Désolé pour la réponse tardive
Évidemment, la méthode lists
a été deprecated
dans Laravel, mais vous pouvez utiliser la méthode Pluck.
Par exemple:
Laravel 5.7
public function create()
{
$countries = Country::pluck('country_name','id');
return View::make('test.new')->with('countries', $countries);
}
et dans la vue si vous êtes FORM
composants juste passer comme
{{ Form::select('testname',$countries,null,['class' => 'required form-control select2','id'=>'testname']) }}
si va générer le menu déroulant
mais j'ai une situation pour montrer que sélectionner le pays comme première option et comme valeur nulle
<option value="" selected="selected">--Select Country--</option>
alors j'ai parlé de
https://stackoverflow.com/a/51324218/8487424
et corrigé cela, mais plus tard, si je veux changer cela, je déteste le changer dans la vue
Donc, ont créé la fonction d'assistance basée sur https://stackoverflow.com/a/51324218/8487424
et placée dans le modèle de pays
public static function toDropDown($tableName='',$nameField='',$idField='',$defaultNullText='--Select--')
{
if ($idField == null)
{
$idField="id";
}
$listFiledValues = DB::table($tableName)->select($idField,$nameField)->get();
$selectArray=[];
$selectArray[null] = $defaultNullText;
foreach ($listFiledValues as $listFiledValue)
{
$selectArray[$listFiledValue->$idField] = $listFiledValue->$nameField;
}
return $selectArray;
}
et dans le contrôleur
public function create()
{
$countries = Country::toDropDown('countries','name','id','--Select Country--');
return View::make('test.new')->with('countries', $countries);
}
et enfin dans la vue
{{ Form::select('testname',$countries,null,['class' => 'required form-control select2','id'=>'testname']) }}
et le résultat est comme prévu, mais je recommande fortement d'utiliser la méthode pluck()
Pour Laravel 5:
$items = Items::lists('name', 'id');
Poussez un élément au début de la collection.
$items->prepend($value, $key = null);
Beaucoup a déjà été dit, mais gardez à l'esprit qu'il y a des moments où vous ne voulez pas exporter tous les enregistrements de la base de données dans votre champ de sélection ... Exemple clé J'ai travaillé sur ce site de gestion d'école où Je dois sortir toutes les catégories du tableau d’affichage dans une instruction select. De mon contrôleur c'est le code que j'ai écrit
Tableau d'affichage :: groupBy () -> pluck ('catégorie') -> get ();
De cette façon, vous obtenez un enregistrement distinct, car ils ont été regroupés, donc aucune répétition d’enregistrements
Essaye celui-là. Sans utiliser contrôleur
{{ Form::select('apartment_id', \App\Apartment::all()->pluck('apartment_name', 'apartment_id')->toArray(), null,['class'=>'select2 form-control', 'multiple'=>'multiple','required','id' => 'apartment_id']) }}
J'essayais de faire la même chose dans Laravel 5.8 et j'ai eu une erreur concernant le fait d'appeler plumer statiquement. Pour ma solution, j'ai utilisé ce qui suit. La collection s'appelait clairement todoStatuses.
<div class="row mb-2">
<label for="status" class="mr-2">Status:</label>
{{ Form::select('status',
$todoStatuses->pluck('status', 'id'),
null,
['placeholder' => 'Status']) }}
</div>
Pour renseigner la liste déroulante dans laravel, nous devons suivre les étapes ci-dessous.
De contrôleur nous devons obtenir la valeur comme ceci:
public function addCustomerLoyaltyCardDetails(){
$loyalityCardMaster = DB::table('loyality_cards')->pluck('loyality_card_id', 'loyalityCardNumber');
return view('admin.AddCustomerLoyaltyCardScreen')->with('loyalityCardMaster',$loyalityCardMaster);
}
Et le même que nous pouvons afficher en vue:
<select class="form-control" id="loyalityCardNumber" name="loyalityCardNumber" >
@foreach ($loyalityCardMaster as $id => $name)
<option value="{{$name}}">{{$id}}</option>
@endforeach
</select>
Cette valeur de clé dans la liste déroulante, vous pouvez utiliser selon vos besoins. J'espère que ça peut aider quelqu'un.