php - 为什么当我使用 foreach 时我的代码只向 DB 插入一个
问题描述
我需要使用foreach将数据插入数据库但是我的代码只插入最后一个,请帮我找出原因?
发布数据
{
"APIPassword": "Test",
"Method": "Transfer",
"Data": [
{
"Account": "Test01",
"Amount": 100,
"TransactionNo": "Test1",
"dbID": "Bet1"
},
{
"Account": "Test02",
"Amount": -100,
"TransactionNo": "Test2",
"dbID": "Bet2"
}
]}
我的代码
$apiPassword = $data['APIPassword'];
$method = $data['Method'];
$datas = $data['Data'];
$db = new db();
foreach ($datas as $data) {
$db->userId = '1';
$db->account = $data['Account'];
$db->amount = (float) $data['Amount'];
$db->transactionNo = $data['TransactionNo'];
$db->dbID = $data['dbID'];
$db->save();
}
提交时的结果
"Account": "Test02",
"Amount": -100,
"TransactionNo": "Test2",
"db": "Bet2"
解决方案
您需要在 for 循环中每次实例化一个新的 db 对象,在您当前的代码中,您在循环的每次迭代中都使用相同的对象。
将您的代码更改为:
$apiPassword = $data['APIPassword'];
$method = $data['Method'];
$datas = $data['Data'];
foreach ($datas as $data) {
$db = new db();
$db->userId = '1';
$db->account = $data['Account'];
$db->amount = (float) $data['Amount'];
$db->transactionNo = $data['TransactionNo'];
$db->dbID = $data['dbID'];
$db->save();
}
推荐阅读
- c++ - 如何用c++连接mysql并在dev c++中运行程序
- javascript - 如果正在搜索值,如何在数组中返回 json 对象
- ios - Swift:如果用户达到最大字符,如何移动到下一个 UITextField
- sql - SQL UPDATE WHERE CASE
- byte-buddy - 可以使 ByteBuddy 静态引用持久化吗?
- javascript - 如何根据按钮单击添加两个每行总和?
- macos - Apple 不支持 OpenGL 是什么意思?
- css - PurgeCSS CLI 不会在命令行之外输出 CSS
- css - 如何将 CSS 新的“内容可见性”属性添加到使用 Typescript 和 SCSS 的 React 类组件?
- javascript - UnknownType 类型的验证错误:未知类型 CreateLeagueInput AWS Amplify GraphQL