【问题标题】:Laravel - array post from api saves to database as "Array" how to get array itemsLaravel - 来自 api 的数组帖子保存到数据库作为“数组”如何获取数组项
【发布时间】:2016-12-01 15:14:44
【问题描述】:

我有一个向我的服务器发送 POST 的外部 api,POST 正文以数组形式出现在 json 响应中

{
  "IDs": [
    1378143,​1378141,​1971403,​1451025,​1451026,​1374561,​1378036,​1371423,​1371424,​         
    1971568,​1371426,​1718539,​1718515,​1831163,​1718540,​1362068,​1376341,​1378221,
    1378222,​1378220,​1380468,​1380467,​1417322,​1385612,​1971567
  ] 
}

我将帖子保存如下:

$Id = new IdModel();
$Id->id = $request['IDs'];
$Id->save();

这将我的数据库列 id 中的数组保存为“Array”,我怎样才能获取数组中的所有值来保存而不是单词 Array?

【问题讨论】:

  • 你应该使用 stackoverflow 的 sn-p 代码工具来显示 JSON 响应。它可能看起来更好
  • 您想将所有的 id 和数字放在一个条目中,还是分别放在不同的条目中? ?
  • 您可能希望foreach($request['IDs'] as $id) {} 分别处理每个 ID。您的问题不清楚每个 ID 是否应该获得单独的 IdModel 记录,或者是否发生了其他事情。
  • 是的,最终的解决方案是让每个 ID 都是独立的 IdModel 记录,我知道如何将它们传递到每个记录中。我只是想了解为什么数组在 db 的列中显示为“Array”。

标签: php json api laravel post


【解决方案1】:

我按照@TheFallen 的建议将数据类型更改为 JSON,现在可以使用了。 感谢大家的帮助和投入。

【讨论】:

    【解决方案2】:

    只需在循环中添加代码

    foreach($request['IDs'] as $id) {
        $obj = new IdModel();
        $obj->id = $id;
        $obj->save();
    }
    

    【讨论】:

      【解决方案3】:
      $Id = new IdModel(); 
      $IDs = '';
      foreach($request['IDs'] as $id) {
          $IDs.= ',' . $id;
      }
      $Id->id = $IDs; 
      $Id->save();
      

      您在 IDs 属性中的内容是一个数组,您应该使用 foreach 来迭代您的数组并连接每个 ID 以将其保存在您的数据库中。

      如果你想为每个 ID 创建一行,你应该使用:

      foreach($request['IDs'] as $id) {
          $newId = new IdModel();
          $newId->id = $id; 
          $newId->save();
          unset($newId);
      }
      

      【讨论】:

      • implode 在这种情况下会比foreach 更好,但我认为$Id->id 不太可能是逗号分隔的ID 列表。
      • 已将您的案例添加到我的回答中,感谢您的反馈。
      【解决方案4】:

      使用属性转换。打开你的 IdModel 模型并添加:

      protected $casts = [
          'id' => 'array'
      ];
      

      这将在您每次从数据库中获取数组以及每次将其保存到数据库时转换数组。

      【讨论】:

      • 注意:这要求列具有适当的数据类型。 JSON、文本等 - 不是整数或太小而无法容纳数据的字符串列。
      • 我将列更改为 JSON 类型,并将强制转换添加到 id 列
      • @TheFallen 这几天我没有收到来自 API 的任何帖子,所以我正在等待它是否有效
      • @TheFallen 是的,现在可以通过将数据类型更改为 JSON 谢谢
      • @Kyl 太好了,如果这解决了您的问题,请将问题标记为已解决。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      • 2016-01-08
      • 2021-11-07
      • 2021-02-08
      相关资源
      最近更新 更多