Drupal 7 Drupal 7节点\u保存完整性约束冲突

Drupal 7 Drupal 7节点\u保存完整性约束冲突,drupal-7,save,constraints,nodes,unique-constraint,Drupal 7,Save,Constraints,Nodes,Unique Constraint,我必须从myModule中的自定义代码中更新一些nodereference字段。这必须在插入特定类型的新节点时完成,因此我实现了hook_node_insert,如下所示: function myModule_node_insert($node){ $settings = _settings_forms_nodereference_fields($node->type); $field = $settings['field']; $language = field_

我必须从myModule中的自定义代码中更新一些nodereference字段。这必须在插入特定类型的新节点时完成,因此我实现了hook_node_insert,如下所示:

function myModule_node_insert($node){
    $settings = _settings_forms_nodereference_fields($node->type);
    $field = $settings['field'];
    $language = field_language('node', $node, 'body');
    $node->{$field}[$language][0]['nid'] = 408;
    $node->{$field}[$language][1]['nid'] = 408;
    $node->{$field}[$language][2]['nid'] = 408;
    node_save($node);
}
[field_event_form_s_] => Array
    (
        [und] => Array
            (
                [0] => Array
                    (
                        [nid] => 261
                    )

                [1] => Array
                    (
                        [nid] => 262
                    )

                [2] => Array
                    (
                        [nid] => 263
                    )
            )
    )
但是,每次尝试创建新节点时,都会出现以下错误:

PDOException:SQLSTATE[23000]:完整性约束冲突:1062键“PRIMARY”的重复条目“436”:插入到{node}(nid、vid、类型、语言、标题、uid、状态、创建、更改、注释、升级、粘贴、tnid、翻译)值中

我发现这是因为node_save函数,但没有它,我的更改不会提交

完整数组如下所示:

function myModule_node_insert($node){
    $settings = _settings_forms_nodereference_fields($node->type);
    $field = $settings['field'];
    $language = field_language('node', $node, 'body');
    $node->{$field}[$language][0]['nid'] = 408;
    $node->{$field}[$language][1]['nid'] = 408;
    $node->{$field}[$language][2]['nid'] = 408;
    node_save($node);
}
[field_event_form_s_] => Array
    (
        [und] => Array
            (
                [0] => Array
                    (
                        [nid] => 261
                    )

                [1] => Array
                    (
                        [nid] => 262
                    )

                [2] => Array
                    (
                        [nid] => 263
                    )
            )
    )

我在下一次谷歌搜索中发帖后立即找到了问题的答案。我认为它对其他人有用,包括我自己

下面的代码实现了这一点:

function myModule_node_insert($node){
    $settings = _settings_forms_nodereference_fields($node->type);
    $field = $settings['field'];
    $language = field_language('node', $node, 'body');
    $node->{$field}[$language][0]['nid'] = 408;
    $node->{$field}[$language][1]['nid'] = 408;
    $node->{$field}[$language][2]['nid'] = 408;
    field_attach_update('node', $node);
}
需要更新字段本身,而不是保存节点。盖伊在解释的时候做得更好,同时保持简单