【问题标题】:Laravel loop through associative array then save to databaseLaravel 循环遍历关联数组然后保存到数据库
【发布时间】:2019-05-13 01:16:45
【问题描述】:

我是初学者,目前正在学习 Vue js 和 Laravel。所以我想弄清楚如何通过 axios 创建一个 POST 请求,然后将多个条目插入到我的数据库中。

我有这个数组,例如:

{
  "comakers": [
    {
      "name": "Sample",
      "email": "sample@email.com"
    },
    {
      "name": "Test",
      "email": "test@email.com"
    }
  ]
}

然后在我的 laravel 控制器上我想做一个像这样的 foreach 循环

public function update(Request $request, $id)
{
    $data = $request->all();

    foreach ($data as $comaker){
        $nominate = new Nominate();
        $nominate->loan_application_id = $id;
        $nominate->comaker_name = $comaker->name;
        $nominate->comaker_email = $comaker->email;

        $nominate->save();
    }

}

但我收到一个错误“尝试获取非对象的属性'名称'”。有人可以给我一些关于如何实现这一目标的想法吗?

顺便说一句,我正在尝试使用控制器中的更新功能。基本上,我想(如果不存在则插入新的)或(当存在现有数据时进行编辑)。我在这里的做法是否正确?

(更新)

当我尝试获取 $data = $request->all(); 的值时,laravel dd 或 dump 会显示此信息

array:1 [
  "comakers" => array:2 [
    0 => array:2 [
      "name" => "Sample"
      "email" => "sample@email.com"
    ]
    1 => array:2 [
      "name" => "Test"
      "email" => "test@email.com"
    ]
  ]
]

【问题讨论】:

  • 这样的错误消息通常有一个行号,可以为您提供在哪里找到错误的线索。您可以在此处发布时显示所有错误消息吗
  • 嗨,Noah,你能用 axios 帖子更新你的问题吗,我认为你在请求中找不到数组
  • 请做一个var_dump($data) 并向我们展示输出
  • @RiggsFollyI 添加了关于问题的转储日志

标签: php arrays json laravel


【解决方案1】:

我认为all() 不会返回一个对象数组,而是一个关联数组。因此,您可以尝试以下方法:

// Notice that you should use `json()` since the data is in json format
$data = $request->json()->all();

foreach ($data['comakers'] as $comaker) {
  $nominate = new Nominate();
  $nominate->loan_application_id = $id;
  $nominate->comaker_name = $comaker['name'];
  $nominate->comaker_email = $comaker['email'];

  $nominate->save();
}

当然,您也可以将结果转换为这样的对象:

foreach ($data['comakers'] as $item) {
  $comaker = (object) $item;
  $nominate = new Nominate($data);
  ...

我还建议您简单地打印出结果的内容,以查看它实际包含的内容,例如使用var_dump()

var_dump($data);

【讨论】:

  • 嘿 Cyclonecode,我在 foreach 之后添加了 $comaker = (object) $comaker; 行,它实际上解决了问题。您可以将其添加回来,以便我接受您的答案吗?非常感谢您的帮助!
  • @Noah - 是的,我再次添加了它,但唯一有效的原因是因为数据不是我在答案顶部所说的对象数组。数据是一个关联数组,所以第一个解决方案应该也可以。
【解决方案2】:

我认为您对 Json 变量而不是其中的 comakers 对象进行了 foreach。

foreach ($data->comakers as $comaker) {
        $nominate = new Nominate();
        $nominate->loan_application_id = $id;
        $nominate->comaker_name = $comaker->name;
        $nominate->comaker_email = $comaker->email;

        $nominate->save();
}

【讨论】:

  • 不幸的是,这样做会显示另一个错误“尝试获取非对象的属性 'comakers'”
  • 对,我看到了你的vardump,你不能得到一个非对象的属性。由于它是一个数组,你应该尝试$data['comakers'] foreach 和$comaker['name'] 在循环内
【解决方案3】:

当你尝试循环时忘记了comaker 键,你应该这样做

$data = $request->all();

foreach ($data['comakers'] as $comaker){
    $nominate = new Nominate();
    $nominate->loan_application_id = $id;
    $nominate->comaker_name = $comaker['name'];
    $nominate->comaker_email = $comaker['email'];

    $nominate->save();
}

【讨论】:

  • 我认为这行不通,因为结果中没有对象,只有关联数组。
  • 你说得对,Laravel 将 json 解码为关联数组,我会更新答案
猜你喜欢
  • 2018-01-31
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 2018-08-30
  • 1970-01-01
  • 2015-04-21
  • 2020-10-19
  • 1970-01-01
相关资源
最近更新 更多