2012-01-17 94 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);