¿Cuál es la forma adecuada de obtener elementos de una cola de entidad?

9

Estaba teniendo problemas para encontrar ejemplos de API para entityqueue en Drupal 8.

Terminé escribiendo una consulta para obtener los artículos.

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

Pero me gustaría usar una función integrada si es posible. ¿Dónde está la función para recuperar elementos de una cola de entidad?

oknate
fuente
Lo mismo que en D7 - \ Drupal :: queue ('my queue') -> ClaimItem ()
No creo que sea lo mismo. Hay una cola de tabla que usa el objeto DatabaseQueue. Este es el módulo entityqueue. Probé su ejemplo, y no funciona, y al profundizar en el código, parece que el objeto DatabaseQueue está mirando una tabla con columnas como "nombre", que faltan en la tabla entity_subqueue__items.
Oknate
Ah, lo siento, no uso el módulo entityqueue.

Respuestas:

12

Dado $ sid es su id de la cola:

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

Carga el objeto de la cola secundaria. Puede manipular esto para recuperar o actualizar la cola de su entidad.

Para obtener los artículos:

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

Para actualizar los elementos, agregue otro elemento a la matriz $ items y luego guarde el objeto de entidad:

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

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

$entity_subqueue->save();

Voila!

Puede verificar en la base de datos que la cola de su entidad está actualizada:

select * from entity_subqueue__items where bundle = :sid;

También me gustaría agregar que hay una gran alternativa al uso de entityqueue en Drupal 8: el módulo de páginas de configuración . Le permite crear paquetes de entidades que solo tienen una entidad. Luego puede agregar cualquier tipo de campo que desee, incluidos los campos de referencia de entidad. Recientemente reemplacé una cola de entidad en un proyecto con una página de configuración con un campo de referencia de entidad, y preferí la experiencia del usuario.

oknate
fuente
0

También hay un atajo para cargar la subcuela: \Drupal\entityqueue\Entity\EntitySubqueue::load($sid);

rémy
fuente