Почему мой код вставляет только один в БД, когда я использую foreach - PullRequest
0 голосов
/ 30 апреля 2018

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

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Вам необходимо каждый раз создавать новый объект 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();
}
0 голосов
/ 01 мая 2018

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