Qual é a maneira apropriada de obter itens de uma fila de entidades?

9

Estava com problemas para encontrar exemplos de API para a fila de entidades no Drupal 8.

Acabei escrevendo uma consulta para obter os itens.

$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();

Mas eu gostaria de usar uma função interna, se possível. Onde está a função para recuperar itens de uma fila de entidades?

oknate
fonte
O mesmo que em D7 - \ Drupal :: queue ('minha fila') -> ClaimItem ()
Eu não acho que é o mesmo. Há uma fila de tabelas que usa o objeto DatabaseQueue. Este é o módulo entityqueue. Eu tentei o seu exemplo, e ele não funciona, e, digitando o código, parece que o objeto DatabaseQueue está olhando para uma tabela com colunas como "nome", que estão faltando na tabela entity_subqueue__items.
oknate
Desculpe, eu não uso o módulo entityqueue.

Respostas:

12

Dado $ sid é seu ID de sub-fila:

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

Carrega o objeto de sub-fila. Você pode manipular isso para recuperar ou atualizar sua fila de entidades.

Para obter os itens:

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

Para atualizar os itens, adicione outro item à matriz $ items e salve o objeto da entidade:

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

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

$entity_subqueue->save();

Voila!

Você pode verificar no banco de dados se sua fila de entidades está atualizada:

select * from entity_subqueue__items where bundle = :sid;

Eu também gostaria de acrescentar que existe uma ótima alternativa para usar o entityqueue no Drupal 8: o módulo Config Pages . Permite criar pacotes de entidades que possuem apenas uma entidade. Você pode adicionar qualquer tipo de campo que desejar, incluindo os campos de referência da entidade. Recentemente, substituí uma fila de entidades em um projeto por uma página de configuração com um campo de referência de entidade e preferi a experiência do usuário.

oknate
fonte
0

Há também um atalho para carregar a sub-fila: \Drupal\entityqueue\Entity\EntitySubqueue::load($sid);

rémy
fonte