Мне нужно вставить данные в базу данных с помощью 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"
Вам нужно каждый раз создавать новый объект db в цикле for, в текущем коде вы используете один и тот же объект на каждой итерации цикла.
Измените свой код на это:
$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();
}