类似的任务在这里:Help with db query in drupal - if exists update else insert
但 drupal_write_record()第三个参数是确定更新或插入。也许drupal有另一个功能,谁自己确定主键插入或更新?或者我应该自己编程吗?
答案 0 :(得分:9)
查看db_merge()功能,我认为它具有您正在寻找的功能。
答案 1 :(得分:1)
如果你真的不知道那里是否有记录,你可能需要在程序流程中稍早检查一下。通常我会启动函数或者调用DB的任何东西,如果我没有得到现有的记录对象,我从stdClass创建一个新的。
这有两个好处:首先,它意味着您了解现有数据,因此您可以在需要时使用它,而不是盲目地覆盖它。第二:当你到达写入数据库的位置时,根据对象是否具有id属性,你知道它是INSERT还是UPDATE。
答案 2 :(得分:1)
我自己实现了功能:
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);
}