0

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

除了保存到数据库之外,一切都在工作。使用以下代码:

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

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

通常,我只会增加 delta 字段,但 Drupal 会如此动态地处理它,我担心我会弊大于利: 带有 delta 字段的数据库表的屏幕截图

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

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

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

4

1 回答 1

1

只需使用下一个可用的增量,您将非常安全,每次编辑和保存具有该字段的节点时,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);
于 2012-01-17T17:03:15.957 回答