Générer la liste déroulante d'entrée avec des valeurs de la table DB
Je suis en train de générer une liste déroulante avec les valeurs à partir d'une table MySQL à l'aide de Laravel. La table est simple, deux colonnes - id
et category
.
Suivantes sera de récupérer tous les enregistrements (catégories), mais renvoie un objet plutôt qu'un tableau, qui est ce que j'ai besoin de la liste déroulante code -
$categories = Category::all();
Le code de la liste déroulante est:
{{ Form::select('category', $categories, $post->category_id) }}
Idées?
Mise à JOUR
bgallagh3r a suggéré d'utiliser une boucle foreach pour convertir chaque catégorie à un tableau. Leur code m'a fait fermer, mais a généré un tas de funky imbriquée optgroup
balises. J'ai été en mesure d'obtenir à un seul optgroup
mais c'est un de trop..
$categories = Category::all();
foreach ($categories as $cat)
{
$category = $cat->to_array();
$id = $category['id'];
$value = $category['category'];
$cats[] = array($id => $value);
}
Et puis, dans la forme:
{{ Form::select('categories', $categories)}}
Je me retrouve avec ce code HTML:
<select name="categories">
<optgroup label="0">
<option value="1">Department News</option>
</optgroup>
<optgroup label="1">
<option value="2">General</option>
</optgroup>
...
</select>
OriginalL'auteur NightMICU | 2013-01-08
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer les "listes" de la fonction:
$categories = Category::lists('category', 'id');
(Uniquement pour Laravel 3)
Ou même de quitter le 'id' paramètre, comme il sera, par défaut, le Modèle de clé, voir http://laravel.com/api/source-class-Laravel.Database.Query.html#596
$categories = Category::lists('category');
(Pour Laravel 4, vous avez besoin de la deuxième paramètre, voir http://laravel.com/api/source-class-Illuminate.Database.Query.Builder.html#1034-1063)
Merci, mise à jour de la réponse de L4
C'est vraiment génial. Merci pour la réponse.
Vous aurez probablement besoin de trier votre liste de...
Category::orderBy('category')->lists('category', 'id');
Merci pour la solution, j'ai été searcing pour ce partout sur le net.
OriginalL'auteur Barryvdh
En fonction de si vous utilisez Éloquent pour vos modèles de la Catégorie retourne un tableau d'objets, vous avez besoin de convertir les objets à des tableaux avant de les transmettre à la classe de Formulaire.
Vérifier mon édité répondre
Avez-vous essayé ceci? En bref, il ne fonctionne pas.. retrouver avec un tas de
optgroup
champs et ces. J'ai été en mesure d'obtenir de FERMER à l'aide de quelque chose seul de ces lignes.. va éditer la question en une minutePeut-être l'aide d' ->to_array() n'est pas suffisante, essayez de l'établissement du tableau comme les changements que j'ai faits maintenant.
Utilisez simplement
$categories[$cat->id] = $cat->category;
à la place. Et n'utilisez pasCategory::all()
maisCategory::get(array('name', 'id'))
, à seulement récupérer les colonnes nécessaires. (Ou tout simplement utiliser ma réponse ;))OriginalL'auteur bgallagh3r
Dans Laravel 4, vous pouvez facilement essayer comme suit
À votre avis, ajoutez simplement
{{ Form::select('category', $category) }}
. Le résultat sera ce que vous voulez, comme suitOriginalL'auteur Set Kyar Wa Lar
Comment à ce sujet ?
OriginalL'auteur JackpotK
Juste tweeking bgallagh3r du code un peu les suivantes:
...bien que je préfère (L4):
OriginalL'auteur james
Pour Laravel 5.3.x
Dans Le Contrôleur
En Vue
OriginalL'auteur Octavio Fuenzalida
pour laravel 5.2
dans le contrôleur
en vue
OriginalL'auteur Khan Muhammad