2013-01-08 7 views
7

Ich versuche, eine Dropdown-Liste mit Werten aus einer MySQL-Tabelle mit Laravel zu generieren. Die Tabelle ist einfach, zwei Spalten - id und category.Generieren Dropdown-Listeneingabe mit Werten aus DB-Tabelle

Im Folgenden werden alle Datensätze (Kategorien) abrufen, sondern ein Objekt eher als ein Array zurückgibt, das, was ich für das Drop-down-Code benötigen, ist -

$categories = Category::all(); 

Der Code für das Drop-down ist:

{{ Form::select('category', $categories, $post->category_id) }} 

Ideen?

UPDATE

bgallagh3r schlug eine foreach Schleife unter Verwendung jeder Kategorie in einem Array zu konvertieren. Ihr Code hat mich nahe gebracht, aber eine Reihe von funky verschachtelten optgroup Tags erzeugt. Ich konnte es nur ein optgroup unten erhalten, aber das ist eine zu viel ..

$categories = Category::all(); 
foreach ($categories as $cat) 
{ 
    $category = $cat->to_array(); 
    $id = $category['id']; 
    $value = $category['category']; 
    $cats[] = array($id => $value); 
} 

Und dann, in der Form:

{{ Form::select('categories', $categories)}} 

ich mit diesem HTML am Ende:

<select name="categories"> 
    <optgroup label="0"> 
    <option value="1">Department News</option> 
    </optgroup> 
    <optgroup label="1"> 
    <option value="2">General</option> 
    </optgroup> 
    ... 
    </select> 

Antwort

30

Sie können versuchen, die Funktion 'Listen':

$categories = Category::lists('category', 'id');

(Nur für Laravel 3) oder auch die 'id' Parameter auslassen, wie es auf den Schlüssel Model ausfällt siehe, http://laravel.com/api/source-class-Laravel.Database.Query.html#596

$categories = Category::lists('category');

(Für Laravel 4, Sie tun, um die zweite param benötigen, siehe http://laravel.com/api/source-class-Illuminate.Database.Query.Builder.html#1034-1063)

+0

Ich wusste nichts über die Listen-Methode, bis ich darüber stolperte, aber ich wollte etwas klarstellen, das ich entdeckt habe. Durch das Weglassen des zweiten Parameters wird die Listenmethode nicht standardmäßig auf den Schlüssel des Modells gesetzt. Dies war in 3.2.12 nicht der Fall und auch nicht in der aktuellsten Version von 4. Sie möchten den Schlüssel immer dann übergeben, wenn Sie die Dropdownliste richtig ausfüllen möchten (wobei der Wert der Option zum Wert der Option wird) Schlüssel). – kreeves

+0

Danke, aktualisiert die Antwort für L4 – Barryvdh

+0

Das ist wirklich toll. Danke für die Antwort. –

4

Je nachdem, ob Sie Eloquent für Ihre Modelle verwenden Die Kategorie gibt ein Array von Objekten zurück, Sie müssen die Objekte in Arrays konvertieren, bevor Sie sie an die Form-Klasse übergeben.

foreach (Category::all() as $cat) 
{ 
    $categories[] = array($cat->id => $cat->category); 
} 
{{ Form::select('categories', $categories)}} 
+0

Yep, das ist das Problem .. versuchen, herauszufinden, wie das zu tun. – NightMICU

+0

Überprüfen Sie meine bearbeitete Antwort – bgallagh3r

+0

Haben Sie das ausprobiert? Kurz gesagt, es funktioniert nicht .. am Ende mit einer Reihe von 'optgroup' Felder und so. Ich konnte CLOSE mit etwas allein diese Zeilen bekommen .. wird Frage in einer Minute bearbeiten – NightMICU

1

Wie wäre es damit?

foreach (Category::all() as $cat) 
{ 
    $categories[$cat->id] = $cat->category; 
} 
{{ Form::select('categories', $categories)}} 
1

Nur bgallagh3r Code tweeking ein folgendes wenig arbeiten:

foreach (Category::all() as $cat) 
{ 
    $categories[$cat->id] = $cat->category); 
} 
{{ Form::select('categories', $categories)}} 

... obwohl ich (In L4) bevorzugen:

foreach (Category::select('id', 'category')->orderBy('id','asc')->get() as $cat) 
{ 
    $categories[$cat->id] = $cat->category; 
} 
{{ Form::select('categories', $categories)}} 
3

In Laravel 4, können Sie einfach versuchen Sie wie die folgenden

//Query category and pass it to the view that you want to show your category 
$category = Category::lists('category_name', 'category_id'); 

Aus Ihrer Sicht einfach {{ Form::select('category', $category) }} hinzufügen.Das Ergebnis wird sein, was Sie wollen, wie die folgende

<select name="category"> 
     <option value="category_id">category_name</option> 
</select> 
0

für Laravel 5.2

in Controller

$mechanics = User::where('role_id','3')->lists('name', 'id'); 

im Blick

{{ Form::select('mechanic_id', 
    [''=>'please select'] + $mechanics->toArray(), $order->mechanic_id , 
    array('id' =>'material-select2','class' => 'form-control')) }} 
1

Für Laravel 5.3.x

Controller

$categories = Category::pluck('name', 'id'); 

In View

{{ Form::select('categories', $categories)}} 
Verwandte Themen