TransWikia.com

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

Drupal Answers Asked by esod on October 26, 2021

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?

One Answer

The first line doesn't get you an image, it's a field item list:

$items = $node->get('field_old_image_field');

Then you can get the first item

$item = $items[0];

and append the item properties to the new field:

$node->get('field_new_image_field')->appendItem([
  'target_id' => $item->target_id,
  'alt' => $item->alt,
  'title' => $item->title,
]);

Answered by 4k4 on October 26, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP