php - 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"
]
]
]
解决方案
我不认为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);
推荐阅读
- tableau-api - 将 sql statemet 转换为 tableau 计算字段
- ruby-on-rails - 如何在浏览器和 Rails 控制台上访问图像?我收到一个错误
- qt5.8 - VS2015社区版Qt 5.8项目构建失败
- autodesk-forge - Forge Viewer - 我们可以在加载的模型上进行选择/突出显示并保存在数据库中,以便我们可以在下次用户加载时显示该选择吗?
- python - pandas 如何在合并/加入 2 个 DataFrame 时处理日期更改
- apache-spark - Spark - 如何按索引使用 Spark 分区
- android - Android 主线程 UI 在实现 Google Speech-to-text 时没有响应。怎么解决?
- flutter - Flutter 集成测试 - 当屏幕上没有可用的后退按钮时如何返回到上一个屏幕
- excel - 将文本文件打印到 Excel 工作表
- macos - 如何在 MAC OS Catalina 上调试内核崩溃,因为 Catalina 位于只读文件系统上