Рейтинг:0

Оптимизация выборки данных из сущностных объектов

флаг cn

В настоящее время мы используем EntityTypeManager либо для загрузки, либо для loadMultiple:

$this->entityTypeManager->getStorage('node')->loadMultiple($nids);
$this->entityTypeManager->getStorage('node')->load($nid);

Это создает и возвращает объекты узлов, которые, как мне кажется, используют много ресурсов на сервере (поскольку он извлекает все поля). Мы также пытаемся получить около 500 узлов, каждый из которых имеет более 80 полей. Мы хотим получить только определенные поля.

Кто-нибудь знает способ запросить и получить только нужные поля?

misterdidi avatar
флаг de
Я бы полагался на API базы данных, чтобы сделать собственный запрос, который будет извлекать только определенные поля, которые вам нужны. См. ответ Филиппа Зедлера в сообщении, упомянутом @leymannx.
Рейтинг:2
флаг pt

Вы можете использовать собственный запрос, чтобы быть более эффективным, вот пример:

$connection = \Drupal::service('база данных');
$select = $connection->select('node_field_data', 'n');
$select->fields('n', ['nid', 'type', 'title']);
$select->условие('n.status', 1, '=');
$select->condition('n.type', ['page', 'article'], 'IN');
$select->leftJoin('node__body', 'body', 'body.entity_id = n.nid');
$select->fields('body', ['body_value', 'body_summary']);
$result = $select->execute()->fetchAll(); 
// напечатать $result[0]->body_value; 

Вы должны присоединиться к таблице для каждого поля, которое вам нужно получить. Обратите внимание, что $результат не содержит гидратации Узел объекты, но stdClass; это может работать со всеми типами объектов базы данных (т.е. Пользователь или что-то другое).

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

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