我正在研究一个模块,该模块可直接通过ajax更新设置的CCK分类法复选框的数据。

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

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


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

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


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

如果nid 3在上图中有另一个字段,则delta字段的值为2。然后删除nid为3且delta为0的字段。而不是剩下值1和2的delta字段重置为0和1

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

最佳答案

只要使用下一个可用的增量,您将绝对安全,无论何时每次编辑和保存带有该字段的节点,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);

关于mysql - Drupal数据库API增量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8897211/

10-12 20:52