【问题标题】:drupal insert or update DB record with only one functiondrupal 插入或更新数据库记录只有一个功能
【发布时间】:2011-09-24 19:54:33
【问题描述】:

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

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

【问题讨论】:

    标签: php drupal drupal-7


    【解决方案1】:

    看看db_merge()函数,我想它有你想要的功能。

    【讨论】:

      【解决方案2】:

      如果你真的不知道那里是否已经有记录,你可能需要在你的程序流程中更早地检查一下。通常我会通过调用数据库来启动函数或其他任何东西,如果我没有得到现有的记录对象,我会从 stdClass 中创建一个新对象。

      这有两个好处:首先,这意味着您了解现有数据,因此您可以在需要时使用它,而不是盲目地覆盖它。第二:当你写到数据库的时候,你会根据对象是否有 id 属性知道是 INSERT 还是 UPDATE。

      【讨论】:

      • 我每次都用两个主键生成记录(没有一个是自动递增的),所以我不能在没有测试的情况下在数据库中检查记录。我认为最简单的方法是首先尝试删除记录并插入。但我担心桌子开销......
      • 你的意思是复合键吗?这不会对我概述的方法产生影响。只需在 WHERE 子句中使用该字段组合执行 SELECT * 并查看返回的内容。除了您用于键的字段之外,表中是否还有其他字段(即这是一个多对多连接表)?
      • 我有一个简单的查询。所以我自己写了通用函数,因为我经常需要它。
      【解决方案3】:

      我自己实现了函数:

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

      【讨论】:

        猜你喜欢
        • 2015-10-13
        • 2019-06-14
        • 1970-01-01
        • 1970-01-01
        • 2015-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多