为什么我的代码在我使用foreach时只插入一个db



我需要通过使用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();
}

最新更新