2011-10-13 88 views
1

我有2个节点:Drupal 7的孤儿节点引用时删除节点

  • 项目
  • 错误

一期工程已到错误

当我删除错误的节点引用,那些节点引用仍然是孤立的。什么是最好的清理方法?

UPDATE(这里是我做的)

function dc_project_management_node_delete($node) 
{ 
    if ($node->type == 'bug_request') 
    { 
     $bug_request_nid = $node->nid; 
     $milestone_ids = db_query('SELECT entity_id FROM {field_data_field_bugs_requests} WHERE field_bugs_requests_nid = :bug_request_nid', array(':bug_request_nid' => $bug_request_nid))->fetchCol(); 
     $milestones = entity_load('field_collection_item', $milestone_ids); 

     foreach($milestones as $milestone) 
     { 
      for($k=0;$k<count($milestone->field_bugs_requests['und']);$k++) 
      { 
       if ($milestone->field_bugs_requests['und'][$k]['nid'] == $bug_request_nid) 
       { 
        unset($milestone->field_bugs_requests['und'][$k]); 
       } 
      } 

      entity_save('field_collection_item', $milestone); 
     } 
    } 
} 

回答

1

如果你想排序(当一个项目被删除,即相关的错误都将被删除),你可能只是这样做的引用完整性:

function mymodule_node_delete($node) { 
    if ($node->type == 'project') { 
    $bug_nids = array(); 
    foreach ($node->field_bugs[LANGUAGE_NONE] as $bug) { 
     $bug_nids[] = $bug['nid']; 
    } 

    node_delete_multiple($bug_nids); 
    } 
} 
+0

我的问题是当一个bug被删除时,它仍然显示为项目中的孤立节点。看看我做了什么来解决它,并让我知道如果这没关系。 –

+0

是的,这几乎是我如何做到这一点(除非我可能使用'field_revision_field_bugs_requests'表只是为了安全) – Clive

+0

field_data *,field_revision_ *之间有什么区别,他们相同,以便有相同的字段。 –