簡體   English   中英

更新數據庫行,否則創建新行

[英]Update database row, else create a new row

我正在嘗試使用REPLACE INTO來更新一行(如果存在),否則必須創建一個新行。

我正在使用NOVA框架。 這是我得到的:

public function updateTicketRows($id,$ticketId, $row, $stock, $price)
{
    $pdo = DB::getPdo();
    return DB::raw('REPLACE INTO ticket_rows (id,ticket_id,row,stock,price)
                    VALUES('.$pdo->quote($id).','.$pdo->quote($ticketId).','.$pdo->quote($row).','.$pdo->quote($stock).','.$pdo->quote($price).')');
}

稱呼為:

foreach ($_POST['ticket'] as $ticket) {
                            $this->itemsModel->updateTicketRows($ticket['ticket_row_id'], $id,$ticket["ticket_row"],
                                $ticket["ticket_stock"],$ticket["ticket_price"]);
                        }

但是,它只是行不通的。 沒有創建新項目,也不會更新任何項目。

誰知道我該怎么做?

謝謝您的提前幫助

您可以使用ON DUPLICATE KEY UPDATE處理這種情況:

return DB::raw('INSERT INTO ticket_rows (id,ticket_id,row,stock,price) '.
                'VALUES('.$pdo->quote($id).','.$pdo->quote($ticketId).','.$pdo->quote($row).','.$pdo->quote($stock).','.$pdo->quote($price).') '.
                'ON DUPLICATE KEY UPDATE ticket_id='.$pdo->quote($ticketId).', row='.$pdo->quote($row).', stock='.$pdo->quote($stock).', price='.$pdo->quote($price).';');

...但是...看起來您正在使用Laravel,因此您確實應該依賴PDO對象來保護自己免受SQL注入。 使用::raw()繞過此保護。 在這種情況下,您應該使用updateOrCreate()方法:

TicketRow::updateOrCreate(['ticket_id' => $ticketId], [
        ['row' => $row],
        ['stock' => $stock],
        ['price' => $price]
    ]);

第一個參數指定將記錄分類為新記錄還是更新時要檢查的屬性。 第二個參數傳遞要使用的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM