0

我需要使用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"
4

2 回答 2

1

您需要在 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();
}
于 2018-05-01T10:58:18.850 回答
0

什么是$db = new db();,doesdb对应一个模型?试试这样:

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();
}
于 2018-05-01T05:50:42.653 回答