Ich möchte ein Auswahlfeld wie das folgende mit illuminate\html erstellen:
<select>
<option value="$item->id">$item->name</option>
<option value="$item->id">$item->name</option>
</select>
In meinem Controller habe ich Folgendes versucht:
public function create()
{
$items = Items::all(['id', 'name']);
return view('prices.create', compact('id', 'items'));
}
Und aus meiner Sicht:
<div class="form-group">
{!! Form::Label('item', 'Item:') !!}
{!! Form::select('item_id', $items, null, ['class' => 'form-control']) !!}
</div>
Das Problem ist, dass anstelle von $item->name
zeigt alle Informationen der Entität an.
Laravel bietet einen Abfrage-Generator mit der Funktion lists ()
In Ihrem Fall können Sie Ihren Code ersetzen
$items = Items::all(['id', 'name']);
mit
$items = Items::lists('name', 'id');
Sie können es auch mit einem anderen Abfrage-Generator verketten.
$items = Items::where('active', true)->orderBy('name')->lists('name', 'id');
quelle: http://laravel.com/docs/5.0/queries#selects
Update für Laravel 5.2
Vielen Dank @jarry. Wie Sie bereits erwähnt haben, sollte die Funktion für Laravel 5.2 sein
$items = Items::pluck('name', 'id');
oder
$items = Items::where('active', true)->orderBy('name')->pluck('name', 'id');
ref: https://laravel.com/docs/5.2/upgrade#upgrade-5.2. - siehe Abschreibungslisten
Laravel> = 5.3 method lists () ist veraltet, benutze pluck()
$items = Items::pluck('name', 'id');
{!! Form::select('items', $items, null, ) !!}
Dadurch erhalten Sie ein Auswahlfeld mit denselben Auswahloptionen wie die ID-Nummern in DB
zum Beispiel, wenn Sie dies in Ihrer DB-Tabelle haben:
id name
1 item1
2 item2
3 item3
4 item4
in der Auswahlbox wird es so sein
<select>
<option value="1">item1</option>
<option value="2">item2</option>
<option value="3">item3</option>
<option value="4">item4</option>
</select>
Ich fand heraus, dass Rupfen jetzt eine Sammlung zurückgibt, und Sie müssen -> toArray () am Ende des Rupfens hinzufügen ... also so: pluck('name', 'id')->toArray();
Ändern Sie einfach Ihren Controller wie folgt:
public function create()
{
$items = Subject::all(['id', 'name']);
return View::make('your view', compact('items',$items));
}
Und Ihre Sicht auf:
<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>
Hoffe, dies wird Ihr Problem lösen
Controller
$campaignStatus = Campaign::lists('status', 'id');
compact ('campaignStatus') führt zu [id => status]; // Beispiel [1 => 'ausstehend']
return view('management.campaign.index', compact('campaignStatus'));
Ansicht
{!! Form::select('status', $campaignStatus, array('class' => 'form-control')) !!}
Fügen Sie in Ihrem Controller Folgendes hinzu:
public function create()
{
$items = array(
'itemlist' => DB::table('itemtable')->get()
);
return view('prices.create', $items);
}
Und aus Ihrer Sicht verwenden
<select name="categories" id="categories" class="form-control">
@foreach($itemlist as $item)
<option value="{{ $item->id }}">{{ $item->name }}</option>
@endforeach
</select>
In Auswahlfeld wird es so sein,
<select>
<option value="1">item1</option>
<option value="2">item2</option>
<option value="3">item3</option>
...
</select>
Laravel Use Array für Form::select
. Also habe ich Array wie folgt übergeben:
$datas = Items::lists('name', 'id');
$items = array();
foreach ($datas as $data)
{
$items[$data->id] = $data->name;
}
return \View::make('your view', compact('items',$items));
Ihrer Ansicht nach:
<div class="form-group">
{!! Form::label('item', 'Item:') !!}
{!! Form::select('item_id', $items, null, ['class' => 'form-control']) !!}
</div>
Laravel 5.3 benutzt Rupfen ($ value, $ key)
$ value wird in Ihrer Dropdown-Liste angezeigt und $ key ist id
Controller
$products = Product::pluck('name', 'id');
return view('main.index', compact('products'));
Ansicht
{{ Form::select('id', $products, null, ['class' => 'form-control']) }}
Ich habe toArray()
nach pluck
hinzugefügt
$items = Item::get()->pluck('name', 'id')->toArray();
{{ Form::select('item_id', [null=>'Please Select'] + $items) }}
Laravel 5. *
In Ihrem Controller:
$items= Items::pluck('name', 'id')->toArray();
return view('your view', compact('items', $items));
Ihrer Ansicht nach:
{{ Form::select('organization_id', $items, null, []) }}
Entschuldigung für die späte Antwort
Offensichtlich war die Methode lists
in Laravel deprecated
, aber Sie können die Zupfmethode verwenden.
Für zB:
Laravel 5.7
public function create()
{
$countries = Country::pluck('country_name','id');
return View::make('test.new')->with('countries', $countries);
}
und in der Ansicht, wenn Sie FORM
Komponenten sind, übergeben Sie einfach als
{{ Form::select('testname',$countries,null,['class' => 'required form-control select2','id'=>'testname']) }}
if erzeugt das Dropdown
aber ich habe eine Situation zu zeigen, dass Land als erste Option und als Nullwert auswählen
<option value="" selected="selected">--Select Country--</option>
also habe ich angesprochen
https://stackoverflow.com/a/51324218/8487424
und das behoben, aber in späteren Zeiten, wenn ich das ändern möchte, hasse ich es, es in der Ansicht zu ändern
Also haben Sie die Hilfsfunktion basierend auf https://stackoverflow.com/a/51324218/8487424
Erstellt und im Ländermodell platziert
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;
}
und im Controller
public function create()
{
$countries = Country::toDropDown('countries','name','id','--Select Country--');
return View::make('test.new')->with('countries', $countries);
}
und schließlich in der Ansicht
{{ Form::select('testname',$countries,null,['class' => 'required form-control select2','id'=>'testname']) }}
und das Ergebnis ist wie erwartet, aber ich empfehle nachdrücklich, die pluck()
-Methode zu verwenden
Für Laravel 5:
$items = Items::lists('name', 'id');
Schieben Sie ein Objekt auf den Anfang der Sammlung.
$items->prepend($value, $key = null);
Viele wurden bereits gesagt, aber denken Sie daran, dass Sie manchmal nicht alle Datensätze aus der Datenbank in Ihr ausgewähltes Eingabefeld ausgeben möchten. Hauptbeispiel Ich habe an dieser Schulverwaltungssite gearbeitet, in der Ich muss alle Kategorien der Pinnwand in einer select-Anweisung ausgeben. Von meinem Controller aus ist dies der Code, den ich geschrieben habe
Pinnwand :: groupBy () -> zupfen ('category') -> get ();
Auf diese Weise erhalten Sie eindeutige Datensätze, da diese gruppiert wurden, sodass keine Wiederholung von Datensätzen erforderlich ist
Probier diese. Ohne Controller
{{ Form::select('apartment_id', \App\Apartment::all()->pluck('apartment_name', 'apartment_id')->toArray(), null,['class'=>'select2 form-control', 'multiple'=>'multiple','required','id' => 'apartment_id']) }}
Ich habe versucht, dasselbe in Laravel= 5.8 zu tun, und habe einen Fehler beim statischen Aufrufen von pluck erhalten. Für meine Lösung habe ich Folgendes verwendet. Die Auflistung wurde eindeutig todoStatuses genannt.
<div class="row mb-2">
<label for="status" class="mr-2">Status:</label>
{{ Form::select('status',
$todoStatuses->pluck('status', 'id'),
null,
['placeholder' => 'Status']) }}
</div>
Um das Dropdown-Auswahlfeld in laravel auszufüllen, müssen wir die folgenden Schritte ausführen.
Vom Controller müssen wir den folgenden Wert erhalten:
public function addCustomerLoyaltyCardDetails(){
$loyalityCardMaster = DB::table('loyality_cards')->pluck('loyality_card_id', 'loyalityCardNumber');
return view('admin.AddCustomerLoyaltyCardScreen')->with('loyalityCardMaster',$loyalityCardMaster);
}
Und dasselbe können wir in der Ansicht anzeigen:
<select class="form-control" id="loyalityCardNumber" name="loyalityCardNumber" >
@foreach ($loyalityCardMaster as $id => $name)
<option value="{{$name}}">{{$id}}</option>
@endforeach
</select>
Diesen Schlüsselwert in der Dropdown-Liste können Sie gemäß Ihren Anforderungen verwenden. Hoffe es kann jemandem helfen.