類似的追求DB記錄是在這裏:Help with db query in drupal - if exists update else insertDrupal的插入或更新,只有一個功能
但drupal_write_record()第三個參數是決定更新或插入。也許drupal有另一個功能,誰自己確定主鍵插入或更新?或者我應該編程我的自我?
類似的追求DB記錄是在這裏:Help with db query in drupal - if exists update else insertDrupal的插入或更新,只有一個功能
但drupal_write_record()第三個參數是決定更新或插入。也許drupal有另一個功能,誰自己確定主鍵插入或更新?或者我應該編程我的自我?
看看db_merge()函數,我認爲它有你正在尋找的功能。
如果你真的不知道是否有記錄,那麼你可能需要在程序流程中稍早檢查一下。通常我會啓動函數或任何與調用數據庫,如果我沒有得到一個現有的記錄對象,我從stdClass中創建一個新的。
這有兩個好處:第一,這意味着你知道現有的數據,所以你可以在需要時使用它,而不是盲目地覆蓋它。第二:當你寫到數據庫時,你知道它是INSERT還是UPDATE,取決於對象是否有id屬性。
我實現了自己的功能:
function drupal_write_record2($table, $data, $primaryKeys) {
$data = (array)$data;
$query = db_select($table)
->fields($table);
if (is_array($primaryKeys))
foreach ($primaryKeys as $key)
$query->condition($key, $data[$key]);
else
$query->condition($primaryKeys, $data[$primaryKeys]);
$update = (bool)$query->execute()->fetchAssoc();
if ($update)
return drupal_write_record($table, $data, $primaryKeys);
else
return drupal_write_record($table, $data);
}
我每次生成兩個主鍵(沒有一個是自動遞增)記錄,所以在DB我不能沒有測試檢查記錄英寸我認爲最簡單的方法是首先嚐試刪除記錄並插入。但是我擔心桌面開銷...... – neworld
你是指複合鍵嗎?這對我所概述的方法沒有任何影響。只需在WHERE子句中使用該字段組合來執行SELECT *並查看返回的內容。表中還有其他字段,除了用於鍵的那些字段(即這是一個多對多連接表)嗎? –
我有一個簡單的查詢。所以我自己編寫通用函數,因爲我經常需要它。 – neworld