drupal仅使用一个函数插入或更新DB记录

时间:2011-09-24 19:54:33

标签: php drupal drupal-7

类似的任务在这里:Help with db query in drupal - if exists update else insert

drupal_write_record()第三个​​参数是确定更新或插入。也许drupal有另一个功能,谁自己确定主键插入或更新?或者我应该自己编程吗?

3 个答案:

答案 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);
}