Drupal数据库api delta

时间:2012-01-17 15:26:49

标签: mysql drupal drupal-6 cck delta

我正在研究一个模块,该模块通过ajax直接更新CCK分类集的数据。

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

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

我收到错误消息抱怨我正在公布'delta'字段的值。我的问题是代码正在尝试编写我的新数据,但delta字段是一个不会自动增加的联合键。

通常情况下,我只会增加delta字段,但Drupal会动态处理它,我担心我会弊大于利: screen shot of database table with delta field

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

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

这样我就不会损坏我的网站,我想知道是否有人可以建议我如何解决这个问题并让Drupal动态处理delta字段......或者是不必要的????

1 个答案:

答案 0 :(得分: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);