Laravel - Formulaire d'Entrée - la sélection Multiple dans une relation un-à-plusieurs
L'une des exigences dans une application que je suis bâtiment est pour un formulaire de saisie qui prend un nombre variable d'éléments pour un seul champ. Par exemple, les sports que je joue sont ('Football','Tennis','Croquet').
Il existe un nombre fini de sports que l'on peut jouer (sans doute), de sorte que ces éléments doivent être sélectionnés à partir d'une "liste déroulante" type de liste dans le formulaire de saisie.
En aval de ce formulaire seront deux tables qui ont un un-à-plusieurs relations. Donc, à partir de ci-dessus, la table "user" aurait une ligne unique, tandis que le "user_sports" tableau de trois lignes. Celles-ci seraient alors liés par le champ id dans la table user.
Je n'ai pas été en mesure de trouver le genre de fonctionnalité où cela peut être réalisé dans la documentation (peut-être que je ne suis pas la recherche de la bonne chose). Ci-dessous est le plus proche que j'ai trouvé, mais c'est seulement pour la sélection d'un seul élément dans une liste déroulante.
http://laravel.com/docs/html#drop-down-lists
Est-il une solution qui me permettra d'obtenir cet élément de formulaire et en cours d'exécution en utilisant le framework Laravel?
Sinon, il existe d'autres moyens que ce type de fonctionnalité peut être obtenue, sans nuire à l'expérience utilisateur?
OriginalL'auteur datavoredan | 2014-07-08
Vous devez vous connecter pour publier un commentaire.
Je suis d'accord avec user3158900, et je ne diffèrent légèrement dans la façon dont je l'utilise:
Cependant, dans mon expérience, la 3e paramètre de l'instruction select est une chaîne de caractères seulement, donc pour le repeuplement de données pour une multi-sélection, j'ai dû faire quelque chose comme ceci:
OriginalL'auteur SamMonk
@SamMonk votre technique est grande. Mais vous pouvez utiliser laravel forme de l'aide pour le faire. J'ai un client et les chiens relation.
Sur votre contrôleur de
Sur le client pour créer une vue, vous pouvez utiliser.
Troisième paramètre accepte une liste de tableau d'un bien. Si vous définissez une relation sur votre modèle, vous pouvez le faire:
Mise À Jour Pour Laravel 5.1
Les listes méthode renvoie une Collection.
La Mise À Niveau Vers 5.1.0
$customer->dogs->lists('id')->toArray()
?Cette réponse a été donnée avant la sortie de Laravel 5. À l'époque(v. 4.2) le
lists()
tableau retourné par défaut.Merci pour le 5.1
Vous êtes les bienvenus.
Veuillez noter que
lists
a été renommépluck
. Les signatures de méthode sont les mêmes donc, pour laravel 5.4 il serait$customer->dogs->pluck('id')->all()
.OriginalL'auteur Sushant Aryal
Laravel 4.2
@SamMonk a donné la meilleure solution, j'ai suivi son exemple et de construire le dernier morceau de code
Dans mon projet, je vais avoir beaucoup de relations de table comme ceci j'ai donc écrit une extension pour le garder propre. Pour le charger, le mettre dans un fichier de configuration comme "app/start/global.php". J'ai créé un fichier "macros.php" dans "app/" répertoire de l'inclure dans le FOLKLORE de global.php
D'utilisation
Liste sans pré-éléments sélectionnés (create view)
Des présélections (modifier la vue)
Complète de l'utilisation
@foreach($tags as $key=>$value) <option value="{{ $key }}" {{ in_array($key, array_values($feature->tags->pluck('id')->toArray())) ? 'selected' : '' }} > {{ $value }}</option> @endforeach
OriginalL'auteur Ben K.
Une sélection multiple est vraiment juste un select avec un
multiple
attribut. Avec cela à l'esprit, il devrait être aussi facile que...Le premier paramètre est juste le nom, mais après la fixer avec l'
[]
sera de retour comme un tableau lorsque vous utilisezInput::get('sports')
.Le second paramètre est un tableau de choix des options.
Le troisième paramètre est un tableau d'options que vous souhaitez pré-sélectionnés.
Le quatrième paramètre est en fait cette mise en place en tant que de multiples sélectionnez le menu déroulant en ajoutant le
multiple
à la propriété réelle de l'élément select..OriginalL'auteur user3158900
Ma solution, son faire avec jquery-choisi et bootstrap, l'id est pour jquery choisi, testé et de travail, j'ai eu des problèmes de concaténer @foreach mais maintenant travailler avec un double @foreach et double @si:
c'est le code por jquery choisi (le blade.php le code n'a pas besoin de ce code de travail)
OriginalL'auteur Raul Fernandez Marques
Ce peut être une meilleure approche que les réponses si vous avez besoin de comparer les 2 sortie des tableaux les uns des autres, mais utiliser le premier tableau pour remplir les options.
C'est également utile lorsque vous avez un non-numérique ou offset index (clé) de votre tableau.
OriginalL'auteur Tom van Tilburg