<?php
$arrayData = myModel::all();
foreach($arrayData as $arrayList){
   $pureData = array_add($pureData, $arrayList->elementValue, $arrayList->elementText);
}
echo Form::select('multiSelectName', $pureData, null, array());
?>
  1. J'essaye d'obtenir des données de la base de données pour remplir des valeurs dans le champ multiselect.
  2. J'essaye de faire quelques valeurs sélectionnées, sur ce champ multiselect.

Comment puis-je y parvenir?

Merci d'avance.

0
saimcan 13 juil. 2015 à 12:17

2 réponses

Meilleure réponse

Une solution serait d'obtenir toutes les options disponibles et celles déjà sélectionnées, puis de savoir si elles correspondent et de créer un élément de sélection avec un paramètre selected défini.

Je ne pense pas que cela puisse être fait en utilisant l’assistant Form (Je sais que cela peut être fait avec une seule valeur, mais je ne l'ai pas essayé avec plusieurs valeurs)

Exemple

Obtenez toutes les options disponibles (essayez d'obtenir quelque chose pour les identifier de manière unique comme l'identifiant)

$all_options=Model::lists('id','name');

J'utilise la méthode lists qui me renverra un tableau avec tous les identifiants disponibles comme valeur et le nom comme clés du tableau.

Ensuite, récupérez toutes les valeurs sélectionnées

$already_selected_options =Model::with('related_model')->lists('id','name');

(Si vous utilisez quelque chose d'éloquent comme celui-ci pour obtenir les identifiants associés, cela fonctionnera)

Ensuite, à votre avis

<select multiple>
@foreach($all_options as $name => $id)
    @if(in_array($id,$already_selected_options))
       <option value="{{$id}}" selected>{{$name}}</option>
      @else
       <option value="{{$id}}">{{$name}}</option>
    @endif
@endforeach
<select>
2
Harry Geo 17 juil. 2015 à 11:21

Je suis d'avis que vous devriez le faire en javascript, si possible. C'est à peine perceptible en termes de latence, et ne gaspille pas de cycles côté serveur. Voici un exemple d'un de mes projets récents. en prime, si vous déclarez un événement onchange inline sur le select, il l'appellera pour vous immédiatement après l'exécution de la fonction.

$('select.select-onload').each(function(index){
    if(typeof $(this).attr('data-selected') !== 'undefined'){
        if($(this).attr('data-selected') == ''){
            return false;
        }
        $(this).val( $(this).attr('data-selected') );
        //we may have a callback. lets manually invoke it.
        if(typeof $(this).attr('onchange') !== 'undefined'){
            var callback = $(this).attr('onchange').replace('();','').trim();
            window[callback].call(window);
        }
    }
});

Usage:

<select class="select-onload" data-selected="{{id}}"> <!--whatever options value is 5 is the one that will be selected.--> </select>

0
r3wt 13 juil. 2015 à 11:00