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_field
has only one image. field_new_image_field
can 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?
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
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP