[英]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.