为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
动漫人物 2023-11-03 21:32:23
我正在以动态呈现的形式处理多个选择框。在下面的场景中,我将选择映射到父标题。示例结果是 { "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 库将数据发送到控制器。 小提琴
查看完整描述

3 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

在PHP中,您有不同的方法来定义array.


一种方法是通过显式设置其值来定义它,例如:


<?php

  $my_array_1 = array("first" => 0, "second" => 1) // or;

  $my_array_2 = array(0, 1, 2);

?>

数组可以存储混合值,因此这是有效的:


<?php

  $my_array_3 = array(0, "one", 2)

?>

你的数组就像之前的数组一样:


<?php

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

?>

PHP没有参数,只有添加的项目,因此您放在末尾的只是数组的第二个元素 。 https://www.php.net/manual/en/function.array.phparray()true


基于此,您的dd输出与定义数组时添加的内容完全相同:


array:2 [

  0 => "{"1":[2],"2":[1,3]}" // this is the string from $request['itemsArray']

  1 => true // this is the second element you added

]

我认为你的问题是你需要解析string你在$request['itemsArray'].


所以,首先:

public function itemsStore(Request $request)

  {

    $json = json_decode($request['itemsArray']);

    // $json is now an associative array in PHP

    // something like: array(1 => array(2), 2 => array(1, 3))

    

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

    // dd(items_arrays);

  }

然后你需要展平这个关联数组:

public function itemsStore(Request $request)

  {

    $json = json_decode($request['itemsArray']);

    // $json is now an associative array in PHP

    // something like: array(1 => array(2), 2 => array(1, 3))

    $items_arrays = [];

    foreach(json as $key1 => $val1) {

      foreach($val1 as $key2 => $val2) {

        $items_array[] = array($key1 => $val2);

      }

    }

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

    dd(items_arrays);

  }

(json_decode有可选参数:https://www.php.net/manual/en/function.json-decode.php)


当然,您应该$request在使用它之前检查 - 身份验证和验证很重要!

抱歉,如果语法不正确 - 我已经一年多没有使用 PHP 了,并且用心编写了示例(没有检查)。但这个想法肯定是正确的:

  1. 从请求中获取数据(验证数据!这不是流程所必需的,但生产环境需要!)

  2. 将其从字符串格式转换为 PHP 数组

  3. 在最终数组中读取它(因为您最终需要它)

  4. 将最终的格式存入数据库


查看完整回答
反对 回复 2023-11-03
?
阿晨1998

TA贡献2037条经验 获得超6个赞

您需要为动态选择指定一些名称。例如,如果您有一个属性列表 [尺寸,颜色],您可以执行以下操作

  • ...

  • ...

在服务器端您将收到一个数组 param attr[]

$attr = 请求()->attr;

它应该看起来像 $attr['size'] => [ 您选择的尺码] $attr['color'] => 您选择的颜色。

您可以转储来观看表格。

我希望它有帮助,请告诉我。


查看完整回答
反对 回复 2023-11-03
?
忽然笑

TA贡献1806条经验 获得超5个赞

尝试这个替代方案


确保在 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

同样,对于其他输入(例如多选颜色输入),您可以使用上述步骤


查看完整回答
反对 回复 2023-11-03
  • 3 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信