Почему мой код вставляет только один в БД, когда я использую foreach

Мне нужно вставить данные в базу данных с помощью 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"

0

Решение

Вам нужно каждый раз создавать новый объект 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();
}
1

Другие решения

Что такое $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();
}
0

По вопросам рекламы [email protected]