0

我必须从 myModule 中的自定义代码更新一些节点引用字段。这必须在插入特定类型的新节点时完成,因此我实现了 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);
}

但是,每次尝试创建新节点时,都会出现以下错误;

PDOException:SQLSTATE [23000]:违反完整性约束:1062 键“PRIMARY”的重复条目“436”:INSERT INTO {node}(nid、vid、type、language、title、uid、status、created、changed、comment、promote ,粘性,​​tnid,翻译)值....

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

完整的数组如下:

[field_event_form_s_] => Array
    (
        [und] => Array
            (
                [0] => Array
                    (
                        [nid] => 261
                    )

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

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

1 回答 1

2

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

以下代码可以解决问题:

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);
}

需要更新字段本身,而不是 node_save。家伙在解释简单的同时做得更好。

于 2012-12-17T17:34:24.877 回答