Tengo un cuadro de lista dual en mi formulario de Laravel y quiero obtener esos valores que se toman del lado derecho. Actualmente, solo se toma 1 valor, pero si un usuario elige 3 valores, me gustaría que los 3 valores se almacenen en la base de datos. ¿Hay alguna manera de hacer esto?
Mi controlador:
public function storesurvey(Request $request) { $energy = new Customer(); $energy->rank1 = $request->input('rank1'); $energy->comments = $request->input('comments'); $energy->save(); return redirect('/survey')->with('success', 'data added'); }Mi vista:
<div class="container"> <div class="jp-multiselect"> <div class="from-panel"> <select name="from[]" class="form-control" size="8" multiple="multiple"> <option value="1">Item 1</option> <option value="2">Item 2</option> <option value="3">Item 3</option> <option value="4">Item 4</option> <option value="5">Item 5</option> </select> </div> <div class="move-panel"> <button type="button" class="btn-move-all-right btn-primary"></button> <button type="button" class="btn-move-selected-right"></button> <button type="button" class="btn-move-all-left"></button> <button type="button" class="btn-move-selected-left"></button> </div> <div class="to-panel"> <select name="rank1" class="form-control" size="8" multiple="multiple"> </select> </div> </div> <script> $(".jp-multiselect").jQueryMultiSelection(); </script> <hr /> <!-- 2 --> </div>¿Alguien podría explicar por qué solo se toma un valor y cómo puedo enviar todos los valores que están presentes a la derecha?
Para enviar valores múltiples desde una entrada seleccionada (o casillas de verificación con el mismo nombre), debe nombrar la entrada con [] como lo hizo en el form[]
<select name="rank1[]" class="form-control" size="8" multiple="multiple">Luego, en su controlador, debe tratarlo como una matriz.
Aquí usé un código json para convertir todos los valores de rango 1 en una cadena de valor único de formato json.
public function storesurvey(Request $request) { $energy = new Customer(); $energy->rank1 = json_encode($request->input('rank1')); $energy->comments = $request->input('comments'); $energy->save(); return redirect('/survey')->with('success', 'data added'); }Otra solución
También puedes hacer esto automáticamente usando Casting
-Cliente.php
class Customer ..... { protected $casts = [ 'rank1' => 'array' ]; .... } Luego, en su controlador, puede asignar una matriz al atributo rank1 directamente sin convertirlo
public function storesurvey(Request $request) { $energy = new Customer(); $energy->rank1 = $request->input('rank1'); $energy->comments = $request->input('comments'); $energy->save(); return redirect('/survey')->with('success', 'data added'); }