Как правильно получить элементы из очереди?

9

У меня были проблемы с поиском примеров API для entityqueue в Drupal 8.

Я закончил писать запрос, чтобы получить предметы.

$query = $this->database->select('entity_subqueue__items', 'esi')
  ->fields('esi', array('items_target_id'))
  ->condition('esi.bundle', $name_of_queue)
  ->orderBy('delta', 'ASC');

$nids = $query->execute()->fetchCol();

Но я бы хотел использовать встроенную функцию, если это возможно. Где находится функция для извлечения элементов из очереди объектов?

oknate
источник
То же самое , как и в D7 - \ Drupal :: очередь ( 'моя очередь') -> claimItem ()
Я не думаю, что это то же самое. Есть очередь таблиц, которая использует объект DatabaseQueue. Это модуль entityqueue. Я попробовал ваш пример, и он не работает, и копаясь в коде, похоже, что объект DatabaseQueue просматривает таблицу с такими столбцами, как «name», которые отсутствуют в таблице entity_subqueue__items.
oknate
Извините, я не использую модуль entityqueue.

Ответы:

12

Данный $ sid является вашим идентификатором под очереди:

$entity_subqueue = \Drupal::entityManager()->getStorage('entity_subqueue')->load($sid);

Загружает объект очереди. Вы можете манипулировать этим, чтобы получить или обновить вашу сущность.

Чтобы получить предметы:

$items = $entity_subqueue->get('items')->getValue();

Чтобы обновить элементы, добавьте еще один элемент в массив $ items, а затем сохраните объект сущности:

$items[] = ['target_id' => 69];

$entity_subqueue->set('items', $items);

$entity_subqueue->save();

Вуаля!

Вы можете проверить в базе данных, что ваша очередь объектов обновлена:

select * from entity_subqueue__items where bundle = :sid;

Я также хотел бы добавить, что в Drupal 8 есть отличная альтернатива использованию entityqueue: модуль Config Pages . Это позволяет вам создавать пакеты сущностей, которые имеют только одну сущность. Затем вы можете добавить любой тип поля, который вам нравится, включая поля ссылок на сущности. Недавно я заменил очередь объекта в проекте страницей конфигурации с полем ссылки на объект, и я предпочел взаимодействие с пользователем.

oknate
источник
0

Существует также ярлык для загрузки под очереди: \Drupal\entityqueue\Entity\EntitySubqueue::load($sid);

rémy
источник