Який належний спосіб отримати предмети з черги?


9

У мене виникли проблеми з пошуку прикладів API для Entqueque в 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();

Але я хотів би використовувати вбудовану функцію, якщо це можливо. Де функція для отримання елементів з черги об'єктів?


Те саме, що і в D7 - \ Drupal :: queue ('моя черга') -> applyItem ()

Я не думаю, що це те саме. Існує черга таблиці, яка використовує об’єкт DatabaseQueue. Це модуль об'єктів. Я спробував ваш приклад, і він не працює, і копаючись у коді, схоже, об’єкт DatabaseQueue дивиться на таблицю зі стовпцями типу "ім'я", які відсутні у таблиці ent_subqueue__items.
окнат

Ах вибачте, я не використовую модуль entqueue.

Відповіді:


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 є чудова альтернатива використанню entqueue: модуль Config Pages . Це дозволяє створювати сукупності сутностей, які мають лише одне ціле. Потім ви можете додати будь-який тип поля, який вам подобається, включаючи посилання посилань на сутність. Нещодавно я замінив чергу об'єктів у проекті на сторінку конфігурації з посилальним полем сутності, і я віддав перевагу користувальницькій роботі.


0

Існує також ярлик для завантаження підпункту: \Drupal\entityqueue\Entity\EntitySubqueue::load($sid);

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.