从实体队列中获取项目的合适方法是什么?


9

我在Drupal 8中无法找到用于实体队列的API示例。

我最终写了一个查询来获取物品。

$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('我的队列')-> claimItem()

我认为那是不一样的。有一个表队列,它使用DatabaseQueue对象。这是实体队列模块。我尝试了您的示例,但它不起作用,并深入了代码,似乎DatabaseQueue对象正在查看带有诸如“ name”之类的列的表,而entity_subqueue__items表中缺少这些列。
oknate,

抱歉,我没有使用entityqueue模块。

Answers:


12

给定$ sid是您的子队列ID:

$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中,除了使用实体队列之外,还有一个很好的选择:配置页面模块。它允许您创建仅具有一个实体的实体束。然后,您可以添加任何喜欢的字段类型,包括实体引用字段。我最近用带有实体引用字段的配置页替换了项目上的实体队列,并且更喜欢用户体验。


0

还有一个加载子队列的快捷方式: \Drupal\entityqueue\Entity\EntitySubqueue::load($sid);

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.