【问题标题】:Drupal database api deltaDrupal 数据库 api 增量
【发布时间】:2012-01-17 15:26:48
【问题描述】:

我正在开发一个模块,该模块通过 ajax 直接更新一组 CCK 分类复选框的数据。

除了保存到数据库之外,一切正常。使用以下代码:

$data = array(
    'vid' => $nid,
    'nid' => $nid,
    'field_grouping_value' => $tid
);
drupal_write_record('content_field_grouping', $data);

我收到错误消息,抱怨我复制了“delta”字段的值。我的问题是代码正在尝试写入我的新数据,但 delta 字段是一个不会自动递增的联合键。

通常,我只会增加 delta 字段,但 Drupal 会如此动态地处理它,我担心我会弊大于利:

http://i.stack.imgur.com/yTwoN.gif">

如果上图中 nid 3 有另一个字段,它的 delta 字段的值为 2。然后我删除 nid 为 3 和 delta 为 0 的字段。而不是留下 delta 字段值 1 和 2,一切都重置为 0 和 1

为了不损坏我的网站,我想知道是否有人可以建议我如何解决这个问题并让 Drupal 动态处理增量字段.....还是没有必要????

【问题讨论】:

    标签: mysql drupal drupal-6 cck delta


    【解决方案1】:

    只要使用下一个可用的 delta,CCK 就会在每次编辑和保存具有该字段的节点时重新执行这些操作(这就是您在删除字段时看到调整的原因)。像这样的东西应该可以工作:

    $next_delta = db_result(db_query('SELECT MAX(delta) + 1 AS del FROM {content_field_grouping} WHERE vid = %d AND nid = %d', $nid, $nid));
    
    $data = array(
      'vid' => $nid,
      'nid' => $nid,
      'field_grouping_value' => $tid,
      'delta' => $next_delta
    );
    drupal_write_record('content_field_grouping', $data);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-20
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多