无法在数据库 Laravel 中存储 Json 对象

Posted

技术标签:

【中文标题】无法在数据库 Laravel 中存储 Json 对象【英文标题】:Unable to store Json object in database Laravel 【发布时间】:2020-06-14 15:00:38 【问题描述】:

在创建计费按钮后,我正在开发一个计费表,它正在创建每个表单元格数组数据的 JSON 对象并通过 AJAX 发送到控制器。

jQuery 代码
 $(".bill").click(function() 
  var iname_item=[];
  var qt_item=[];
  var price_item=[];
  var paying_item=[];
  var bal_item=[];

  $('.iname_item').each(function()
    iname_item.push($(this).text());
  );

  $('.qt_item').each(function()
    qt_item.push($(this).text());
  );

  $('.price_item').each(function()
    price_item.push($(this).text());
  );

  $('.paying_item').each(function()
    paying_item.push($(this).text());
  );

  $('.bal_item').each(function()
    bal_item.push($(this).text());
  );

  var cn_iname_item=JSON.stringify(iname_item);
  var cn_qt_item=JSON.stringify(qt_item);
  var cn_price_item=JSON.stringify(price_item);
  var cn_paying_item=JSON.stringify(paying_item);
  var cn_bal_item=JSON.stringify(bal_item);                                
  alert(cn_iname_item);

  var datastring="item_iname="+cn_iname_item+"&item_qt="+cn_qt_item+"&item_price="+cn_price_item+"&item_paying="+cn_paying_item+"&item_bal="+cn_bal_item;

  $.ajax(
    headers: 
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    ,
    type:'POST',
    url:'/billing',
    data:datastring,
    success:function(data)
      console.log(data);
    ,
  );
);

如何迭代这个 JSON 数据并存储到数据库中?

array:5 [
  "item_iname" => "["Oats","Muesli"]"
  "item_qt" => "["2","5"]"
  "item_price" => "["500","300"]"
  "item_paying" => "["500","300"]"
  "item_bal" => "["0","0"]"
]

【问题讨论】:

你的控制器在做什么?你的数据库结构是什么? 现在控制器只得到 $request->all();和 json_decode 特定请求,如 $iname=json_decode($request->get(item_iname),true); 【参考方案1】:

几种方法。

最简单:

在您的表中创建一个文本列(例如:属性“数据”)。标准的 laravel 东西。我相信你可以做到。 让您的代码执行此操作:
$object = new yourModel();
$object->data = json_encode($array);
$object->save();

下一个方法,但更好:属性转换

在表格中创建一个文本列。同上。 为您的模型添加默认演员:

受保护的 $casts = ['data' => 'array'];

让您的代码执行此操作:
$object = new yourModel();
$object->data = $array;
$object->save();

注意:这是给你一个想法的伪代码。确保您的应用程序中有正确的代码。

更多关于 laravel 中属性转换的信息: laravel documentation about attribute casting

【讨论】:

$iname=json_decode($request->get('item_iname'),true) ;我得到了这样的每个 $request 数据,现在我们有这么多 item_name 显然下一步是什么?如何迭代所有这些请求并存储到数据库中,我已经在我的表中为每个单元格创建了列,例如:item_name、item_qt、item_price、paid、item_bal 那是默认的 php?你需要一个例子吗?

以上是关于无法在数据库 Laravel 中存储 Json 对象的主要内容,如果未能解决你的问题,请参考以下文章

无法在 laravel 5.2 中查询 json 数据

如何自定义 laravel api 的 json 响应并在 vuex 中显示它们

从laravel控制器返回json时尝试获取非对象的属性“id”

如何使用 XMLHttpRequest() 将 JSON 存储在 Laravel 数据库中?

在 Laravel 文件夹结构中存储 JSON 文件的位置

在 Laravel 中从数据库存储和加载 JSON 的最佳方法