Рейтинг:1

Получить значение поля из нескольких сущностей одновременно

флаг ar

У меня есть сайт Drupal, использующий абзацы в котором один из типов контента, назовем его Группа, может содержать любое количество абзацев, и каждый из этих абзацев, назовем их Члены, содержит ссылку на пользователя. Я хочу получить все жидкостьпользователей, которые Члены данного Группа.

Я мог бы сделать это с помощью запроса к базе данных, например

ВЫБЕРИТЕ field_user_target_id
ОТ para__field_user
ГДЕ entity_id = (
    ВЫБЕРИТЕ field_members_target_id
    ОТ node__field_members
    ГДЕ entity_id = <идентификатор группы>
    ПРЕДЕЛ 1
);

для данного Идентификатор группы, но мне интересно, есть ли способ сделать это эффективно без прямого запроса к базе данных. Один из вариантов будет что-то вроде

$group = \Drupal\node\Entity\Node::load($groupID);
$uids = [];
foreach ($group->field_members->referencedEntities() as $member) {
    $uids[] = $member->field_user->target_id;
}

но есть ли способ сделать это без необходимости перебирать Члены?

Рейтинг:3
флаг cn

Цикл foreach - это то, как я бы это сделал, но, по вашему мнению, запрос обычно будет наиболее эффективным. Технически это применимо в любой ситуации, когда у вас есть промежуточный слой API. Если вы предпочитаете создать запрос, вы можете это сделать, но обычно это не требуется. При профилировании вашего приложения, если эта область станет узким местом, именно тогда я начну рассматривать возможность сделать что-то подобное. Обратите внимание, что использование API обрабатывает такие вещи, как ревизии и все такое прочее.

Видеть Drupal 8: как я могу «нетерпеливо загрузить» объекты, на которые ссылается поле EntityReferenceFieldItemList для получения дополнительной информации.В этом посте они объясняют, что с помощью ссылочные объекты () загружает эти объекты в память, поэтому это не похоже на отдельные обращения к базе данных.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.