wake-up-neo.com

Laravel-5 Wie füllt man ein Auswahlfeld aus der Datenbank mit ID-Wert und Name-Wert

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.

48
borracciaBlu

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

95
mininoz

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

23
lewis4u

Ä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

20
Sohel0415

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')) !!}
7
Hashmat Waziri

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>
6

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>
5
Naing Win

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

Ich habe toArray() nach pluck hinzugefügt

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

{{ Form::select('item_id', [null=>'Please Select'] + $items) }}
3
Gediminas

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, []) }}
3
Dominic Tan

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

3
Manojkiran.A

Für Laravel 5:

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

Schieben Sie ein Objekt auf den Anfang der Sammlung.

$items->prepend($value, $key = null);
2
3ehrang

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

0
Dawood Iddris

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

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>
0
PhPGuy

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.

0