在数据库中保存动态选择值 - Laravel

我正在以动态呈现的形式处理多个选择框。


在下面的场景中,我将选择映射到父标题。


示例结果是 { "1": [ 2 ], "2": [ 1, 3 ] }


        <table class="table">

          <thead>

            <tr>

              <td>Variation Name</td>

              <td>Variation Values</td>

            </tr>

          </thead>

          <tbody>

            <tr>

              <td>Size</td>

              <td>

                <select multiple="multiple">

                  <option value="2">Medium</option>

                </select>

              </td>

            </tr>

            <tr>

              <td>Color</td>

              <td>

                <select multiple="multiple">

                  <option value="1">White</option>

                  <option value="3">Blue</option>

                  <option value="4">Black</option>

                </select>

              </td>

            </tr>

          </tbody>

        </table>

我将结果传递给 Laravel 控制器,以便我可以保存响应。


我不确定如何将数据保存到数据库..


public function itemsStore(Request $request)

    {

        $items_arrays = array($request['itemsArray'], true);

        dd(items_arrays);

    }

结果dd是


array:2 [

  0 => "{"1":[2],"2":[1,3]}"

  1 => true

]

如何以相应的格式将值保存到数据库


item_id | item_value_id

   1             2

   2             1

   2             3

我使用 Vue 填充上述对象。通过 axios 库将数据发送到控制器。 小提琴


动漫人物
浏览 135回答 3
3回答

皈依舞

在PHP中,您有不同的方法来定义array.一种方法是通过显式设置其值来定义它,例如:<?php&nbsp; $my_array_1 = array("first" => 0, "second" => 1) // or;&nbsp; $my_array_2 = array(0, 1, 2);?>数组可以存储混合值,因此这是有效的:<?php&nbsp; $my_array_3 = array(0, "one", 2)?>你的数组就像之前的数组一样:<?php&nbsp; $items_arrays = array($request['itemsArray'], true);?>PHP没有参数,只有添加的项目,因此您放在末尾的只是数组的第二个元素 。 https://www.php.net/manual/en/function.array.phparray()true基于此,您的dd输出与定义数组时添加的内容完全相同:array:2 [&nbsp; 0 => "{"1":[2],"2":[1,3]}" // this is the string from $request['itemsArray']&nbsp; 1 => true // this is the second element you added]我认为你的问题是你需要解析string你在$request['itemsArray'].所以,首先:public function itemsStore(Request $request)&nbsp; {&nbsp; &nbsp; $json = json_decode($request['itemsArray']);&nbsp; &nbsp; // $json is now an associative array in PHP&nbsp; &nbsp; // something like: array(1 => array(2), 2 => array(1, 3))&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; // $items_arrays = array($request['itemsArray'], true);&nbsp; &nbsp; // dd(items_arrays);&nbsp; }然后你需要展平这个关联数组:public function itemsStore(Request $request)&nbsp; {&nbsp; &nbsp; $json = json_decode($request['itemsArray']);&nbsp; &nbsp; // $json is now an associative array in PHP&nbsp; &nbsp; // something like: array(1 => array(2), 2 => array(1, 3))&nbsp; &nbsp; $items_arrays = [];&nbsp; &nbsp; foreach(json as $key1 => $val1) {&nbsp; &nbsp; &nbsp; foreach($val1 as $key2 => $val2) {&nbsp; &nbsp; &nbsp; &nbsp; $items_array[] = array($key1 => $val2);&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; // $items_arrays = array($request['itemsArray'], true);&nbsp; &nbsp; dd(items_arrays);&nbsp; }(json_decode有可选参数:https://www.php.net/manual/en/function.json-decode.php)当然,您应该$request在使用它之前检查 - 身份验证和验证很重要!抱歉,如果语法不正确 - 我已经一年多没有使用 PHP 了,并且用心编写了示例(没有检查)。但这个想法肯定是正确的:从请求中获取数据(验证数据!这不是流程所必需的,但生产环境需要!)将其从字符串格式转换为 PHP 数组在最终数组中读取它(因为您最终需要它)将最终的格式存入数据库

阿晨1998

您需要为动态选择指定一些名称。例如,如果您有一个属性列表 [尺寸,颜色],您可以执行以下操作......在服务器端您将收到一个数组 param attr[]$attr = 请求()->attr;它应该看起来像 $attr['size'] => [ 您选择的尺码] $attr['color'] => 您选择的颜色。您可以转储来观看表格。我希望它有帮助,请告诉我。

忽然笑

尝试这个替代方案确保在 html 中将 name 属性设置为如下所示的数组<select multiple="multiple" name="sizes[]" id="sizes">然后要存储它,您可以将其放入控制器中,例如$sizes = $request->input('sizes');//it will give you string separated by commas$sizes = explode(',', $sizes);// to separate it explode the string// save it to database同样,对于其他输入(例如多选颜色输入),您可以使用上述步骤
打开App,查看更多内容
随时随地看视频慕课网APP