我正在Laravel上构建一个应用程序,我试图将Laravel个数据集存储到DynamoDB中,在阅读了文档DynamoDB之后,DynamoDB一次只能接受25条记录,所以我试图将其存储在25条记录的块中.

为此,我try 使用Laravel的收集方法,但不知何故,格式发生了变化,出现DynamoDB错误SerializationException,以下是我的代码:

$posts = collect($request->posts)->map(function ($items){
  //... transforming the array and returning it
})->chunk(25)

foreach($posts->all() as $chunk) {         
    Post::batchPutItem(collect($chunk)->toArray());
}


return response()->json(['data' => $posts], 200);

前25条记录被适当地保存后,我开始从第二次迭代中得到错误.当我判断数据/返回数据块时,我发现数据被转换

returned results

正如您所看到的,第一个块在数组中,但是下一个块变成了对象.

我甚至试了->chunk(25, true)次,但没有成功.

对此有什么解决方案或变通办法吗?

推荐答案

链接在 comments 中显示了背后的原因.JS通过将关联数组转换为对象来处理PHP中的关联数组,每个索引用作对象键.要解决此问题,您需要进一步映射$posts:

return response()->json(['data' => $posts->map(function ($chunk) {
  return $chunk->values();
  /* or `return array_values($chunk)` if `$chunk` is an Array instead of a Collection */
}], 200);

使用一个简单的数据集:

$posts = collect([0, 1, 2, 3, 4, 5, 6, 7])->chunk(4);

echo json_encode($posts);
echo json_encode($posts->map(function ($chunk) { 
  return $chunk->values();
});

第一个将输出您所看到的内容:

[[0,1,2,3],{"4":4,"5":5,"6":6,"7":7}]

而第二个将如您所期望的那样输出:

[[0,1,2,3],[4,5,6,7]]

参考链接:

https://laravel.com/docs/10.x/collections#method-values

https://php.net/manual/en/function.array-values.php

Php相关问答推荐

Symfony Monolog:使用多个格式化程序

PHP FFI—Convert void * to int

ForHumans函数中的月当量与单位限制

在WooCommerce我的帐户部分添加带有自定义链接的自定义菜单项

允许在WooCommerce管理员优惠券列表中显示自定义优惠券类型

在WooCommerce中的本地收件发货方式下添加一个 Select 字段

创建一个Woocommerce我的帐户订单页面,仅显示已完成的订单

如何使用定制的StateProvider设置JsonLd@上下文?

Laravel 10中的Validator类

如何用Ubuntu 22.04在VSCode中启用XDebug

Laravel处理belongToMany和额外字段

如何在codeigniter中将order_by RAND与下面的代码一起使用

单个产品页面 WooCommerce 订阅价格字符串的更改

根据所选付款方式更改 WooCommerce 提交结帐按钮文本

$_SERVER 超全局变量在 PHP 中是否保证可写?

.htaccess环境变量条件不被判断

服务器遇到内部错误或配置错误,无法完成您的请求

在帖子内容中使用短代码触发 Woocommerce 挂钩

如何在 Laravel 中验证多个输入?

一个php应用程序可以实例化多个RNG吗