【问题标题】:Getting selected values from a multiple select form in Laravel从 Laravel 中的多选表单中获取选定的值
【发布时间】:2013-02-27 18:56:06
【问题描述】:

要生成默认选中项目的下拉列表,请执行以下操作:

echo Form::select('size', array('L' => 'Large', 'M' => 'Medium', 'S' => 'Small'), 'S');

所以我生成了一个下拉列表,默认情况下选择了多个项目,方式如下:

echo Form::select('size', array('L' => 'Large', 'M' => 'Medium', 'S' => 'Small'), array('S', 'M'), array('multiple'));

但是如何获得多个选定的值?

Input::get('size') 只返回最后选择的字符串。

【问题讨论】:

    标签: php laravel laravel-3


    【解决方案1】:

    正确的词是

    采摘

    在控制器中:

    $skills = Skill::pluck('name', 'id');
    
    $selectedSkills = $user->skills()->pluck('skill_user.id');
    

    在刀片中:

    Form::select('skills[]', $skills, $selectedSkills, ['class' => 'form-control', 'multiple' => 'multiple']) }}
    

    【讨论】:

      【解决方案2】:

      根据https://laravelcollective.com/docs/5.2/html#drop-down-lists

      Form::select('size[]',['L' => 'Large', 'M' => 'Medium', 'S' => 'Small'], ['S', 'M'], ['multiple' => 'multiple', 'class' => 'form-control']);
      

      顺便说一下,如果您想在后端将此字段用作数组,请注意下拉菜单的名称 (size[])。

      当你想使用关系作为价值时,事情会变得很棘手,例如

      models
      user =>  common fields
      size => id, name, slug  [
                               {id : 1 , name : Large, slug : L}, 
                               {id : 2 , name : Small, slug : S},
                               {id : 3 , name : Medium, slug : M}
                               ] 
      
      user_size => id, user_id, size_id  [
                                           {id :1, user_id:1, size_id:1}
                                           {id :2, user_id:1, size_id:3}
                                         ]   
      

      所以$user->colors 会返回类似

      laravel collection
      
      [
        USER_SIZE => [  'user_id' => 1 , size_id' => 1 ],
        USER_SIZE => [  'user_id' => 1, 'size_id' => 3 ]
      ]
      

      您可以这样做,记住 User ModelSIZE Model 具有一对多的 sizes 关系

      Form::select('size[]',['L' => 'Large', 'M' => 'Medium', 'S' => 'Small'], $user->sizes->pluck('size')->pluck('slug')->toArray(), ['multiple' => 'multiple', 'class' => 'form-control']);
      

      希望对你有帮助

      【讨论】:

        【解决方案3】:

        通常的选择语句去

        <select name="select_name" id="select_name" multiple="multiple">
        

        工作流程是 Laravel 通过名称获取表单元素。 要使其工作,请将名称更改为数组。

        <select name="select_name[]" id="select_name" multiple="multiple">
        

        这将使 laravel 将 select 的值作为数据数组获取。

        【讨论】:

          【解决方案4】:

          首先,如果你想默认选择多个项目,你必须给出一个值数组作为第三个参数,而不是一个简单的值。

          示例:

          Form::select('size', array('L' => 'Large', 'M' => 'Medium', 'S' => 'Small'), array('S', 'M'), array('multiple'));
          

          应该显示选择了 S 和 M 的选择。

          对于第二点,您应该尝试使用 size[] 而不是 size 之类的名称,这可能会解决问题(因为您发布的选择不是一个简单的值,它是一个值数组)

          【讨论】:

          • 感谢您的回答。使用 size[] 而不是 size 达到了我的预期。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-09-11
          • 2019-11-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多