-1

I am trying to node_save($node) in different database. Second DB is clone of first DB.

its the part of Archive old content data in different database

I am trying with following code

  $node = node_load($nid);
  db_set_active('archive_db');
  field_info_cache_clear();
  node_save($node);
  db_set_active(); 

But its not working. Is anything i am doing wrong ?

i want to use node_save because in my node, number of fields, field_collection, entity_refrences are available.

8
  • Have you try to read the data from that new DB, does it work?
    – GwenM
    Feb 3, 2016 at 9:54
  • hi @Namari : Yes, i am able to read the data from my newDB. Feb 3, 2016 at 10:32
  • One thing i also noticed, i am able to update node. Means same node if exist in both db and i have updated in default db then its updating in 'archive_db' using above code. But its not working if node is not present in ''archive_db'. Feb 3, 2016 at 11:32
  • Try this: unset($node->nid); $node->is_new = true; have you tried entity wrapper?
    – GwenM
    Feb 3, 2016 at 13:07
  • Thanks @Namari, Now its saving the node , and adding field_collections and entity_reference also but data is not saving :( for field_collections. Feb 3, 2016 at 14:11

1 Answer 1

3

Try this, it was working for me:

$nid = '2841';
$item_ids = array();
$node = entity_load('node', array($nid), array(), true);
foreach ($node[$nid]->field_COLLECTION_NAME[LANGUAGE_NONE] as $key => $value) {
    $item_ids[] = $value['value'];
}

//load the field collections
$fc_item = entity_load('field_collection_item', $item_ids);

//change db
db_set_active('my_custom_db');

$clone = new stdClass();
$clone = clone $node[$nid];
unset($clone->nid); 
unset($clone->vid); 
$clone->is_new = true;

//save node so we can use the new nid to link the field collection
entity_save('node', $clone);
//gives you the nid of the new node created
dsm($clone->nid);

//save the field collections
foreach ($fc_item as $key => $value) {
    //unset values
    $value->is_new = true;
    $value->revision_id = NULL; 
    $value->item_id = NULL;
    //link it to a node
    $value->setHostEntity('node', $clone);
    $value->save();
    dsm($value);
}


dsm(entity_load('node', array($clone->nid), array(), true));
//go back to the default DB
db_set_active();
5
  • Are you used field_collections with unlimited value in you entity ? My problem with Field_collections and Paragraph entity values are not saving; Feb 5, 2016 at 12:34
  • Is your field collection in the node_load?
    – GwenM
    Feb 5, 2016 at 13:02
  • I've edited, have a look.
    – GwenM
    Feb 5, 2016 at 13:12
  • same code i already tried , but no luck :( Its not saving the value Feb 5, 2016 at 13:35
  • I've edited, this should work. I had a weird behaviors giving me empty field collection before the one with the data, it disappears once the node is saved though.
    – GwenM
    Feb 5, 2016 at 14:37

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.