我需要通过使用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();
}
什么是 $db = new db();
, db
是否对应于模型?尝试这样:
foreach ($datas as $data) {
$db = new db(); // <-- Important part
$db->userId = '1';
$db->account = $data['Account'];
$db->amount = (float) $data['Amount'];
$db->transactionNo = $data['TransactionNo'];
$db->dbID = $data['dbID'];
$db->save();
}
也许在应用程序的后期您可能需要更新记录。如果dbID
是您的唯一记录密钥,您将做类似的事情:
foreach ($datas as $data) {
$item = db::findFirst([
'conditions' => 'dbID = :dbID:',
'bind' => [
'dbID' => $data['dbID']
]
]);
// Record does not exist in our DB - skip or even create it?
if ($item === false) {
continue;
}
// Proceed with updating data
$item->account = $data['Account'];
$item->amount = (float) $data['Amount'];
$item->transactionNo = $data['TransactionNo'];
$item->save();
}