Skip to main content
2 of 2
edited title
leymannx
  • 18.8k
  • 6
  • 72
  • 126

How can I attach an image from an existing image field to another multi-value image field?

I have the nodes that have the source image field field_old_image_field and the destination image field, field_new_image_field. field_old_image_fieldhas only one image. field_new_image_fieldcan have multiple images and probably does. I need to copy the image from field_old_image_field to field_new_image_field without disturbing the images that are already in field_new_image_field.

Here's my code so far:

foreach ($nodes as $node) {  
    if ($node->hasField('field_old_image_field') && !empty($node->field_old_image_field->target_id)) {
      $image = $node->get('field_old_image_field');
      $image_uri = $image->entity->getFileUri();
      $image_alt = $image[0]->get('alt')->getString();
      $image_title = $image[0]->get('title')->getString();

      $node->get('field_new_image_field')->appendItem([
        'target_id' => $image,
        'alt' => $image_alt,
        'title' => $image_title,
      ]);
    }

    $node->save();
  }

But when I run this code in an update hook, I get

In EntityReference.php line 106:

Value is not a valid entity.

I was getting it to work earlier, but I wasn't getting the alt text or the title text copied over. What's wrong with this code and is there an easier way to do this?

esod
  • 329
  • 4
  • 11