首页 > 解决方案 > Laravel 循环遍历关联数组然后保存到数据库

问题描述

我是初学者,目前正在学习 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();
    }

}

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

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

(更新)

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

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

标签: phparraysjsonlaravel

解决方案


我不认为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);

推荐阅读