【发布时间】:2011-09-24 19:54:33
【问题描述】:
类似的任务在这里:Help with db query in drupal - if exists update else insert
但是drupal_write_record()第三个参数是决定更新还是插入。也许drupal还有另一个功能,谁通过主键自行确定插入或更新?还是我应该给自己编程?
【问题讨论】:
类似的任务在这里:Help with db query in drupal - if exists update else insert
但是drupal_write_record()第三个参数是决定更新还是插入。也许drupal还有另一个功能,谁通过主键自行确定插入或更新?还是我应该给自己编程?
【问题讨论】:
看看db_merge()函数,我想它有你想要的功能。
【讨论】:
如果你真的不知道那里是否已经有记录,你可能需要在你的程序流程中更早地检查一下。通常我会通过调用数据库来启动函数或其他任何东西,如果我没有得到现有的记录对象,我会从 stdClass 中创建一个新对象。
这有两个好处:首先,这意味着您了解现有数据,因此您可以在需要时使用它,而不是盲目地覆盖它。第二:当你写到数据库的时候,你会根据对象是否有 id 属性知道是 INSERT 还是 UPDATE。
【讨论】:
我自己实现了函数:
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);
}
【讨论】: