2012-01-17 44 views
0

我正在使用ajax直接更新一组CCK分类复选框的数据。Drupal数据库api delta

一切正在与保存到数据库的例外。使用下面的代码:

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

我得到错误消息,抱怨我公布'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动态处理三角洲领域.....或是没有必要?

回答

0

只要使用下一个可用增量,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);