0

I am creating file entities with migrate using drush. Image files are being copied down from a remote server. I tried

$this->addFieldMapping('file_replace')->defaultValue('FILE_EXISTS_REPLACE');
$this->addFieldMapping('preserve_files')->defaultValue(TRUE);

If I run the migration with --update it duplicates the files, not replacing existing ones.

drush mi DAProductImages --limit="10 items" --update

When I run this first time it creates the files. Second time it adds _0 to the filenames and duplicates the files. If I rollback after first migration the files are being removed. When rolling back after the second migration only files of last batch get removed. I also tried with:

$this->addFieldMapping('preserve_files')->defaultValue(FALSE);

How can I make it so that I will not end up with duplicates? I have about 30000 images so I cannot afford that.

  • Have you tried FILE_EXISTS_REUSE? – Marcelo Vani Apr 29 '15 at 11:55
  • Yes, I am still getting the duplicated file. – NickO Apr 29 '15 at 11:58
2

This solved it for me.

The documentation at this link was missing a mention that you need to use the class prefix - I just submitted an update to the Drupal Docs to make it more clear:

$this->addFieldMapping('preserve_files')
  ->defaultValue(1);

$this->addFieldMapping('file_replace')
  ->defaultValue(MigrateFile::FILE_EXISTS_REUSE);
0

This works:

$this->addFieldMapping('field_document', 'field_document_uri');
$this->addFieldMapping('field_document:file_replace')->defaultValue(MigrateFile::FILE_EXISTS_REUSE);

Found here.

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.