I want to get a list of nodes and return them as JSON along with their tags (names included). After a lot of research, I’ve only come up with this solution:
I have an array of Nodes (\Drupal\Core\Entity\EntityInterface
) loaded with Node::loadMultiple()
.
Iterating over the array of nodes, and getting their tags using $ node->field_tags
(or whatever the machine name of the tags is) which yields an array of \Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem
Getting all the terms of the node using Term::loadMultiple()
and then iterating over them and getting the name using $ term->name[0]->value
.
The problem is that there’s an extra database read for every node, and I guess that the underlying query for this read is a JOIN :|.
Question: Is there an efficient way to load the tag (term) names along with target_id
, target_type
, target_uuid
, etc? If no, is the current loop on each node the way to go???
More Info:
- I’m paginating the results
- The client can set the number of results per page, but there’s a 50 nodes per page limit
Thanks
P.S.: I have two more types of tags so I have to do this two more times. Bright side is, the other two tags are 1to1.