Quelle est la manière appropriée d'obtenir des éléments d'une file d'attente d'entité?

9

J'avais du mal à trouver des exemples d'API pour entityqueue dans Drupal 8.

J'ai fini par écrire une requête pour obtenir les articles.

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

Mais j'aimerais utiliser une fonction intégrée si possible. Où est la fonction de récupération des éléments d'une file d'attente d'entités?

oknate
la source
Identique à D7 - \ Drupal :: queue ('ma file d'attente') -> claimItem ()
Je ne pense pas que ce soit la même chose. Il y a une file d'attente de table, qui utilise l'objet DatabaseQueue. Il s'agit du module entityqueue. J'ai essayé votre exemple, et cela ne fonctionne pas, et en creusant dans le code, il semble que l'objet DatabaseQueue regarde une table avec des colonnes telles que "nom", qui manquent dans la table entity_subqueue__items.
Oknate
Ah désolé, je n'utilise pas le module entityqueue.

Réponses:

12

Étant donné que $ sid est votre identifiant de sous-file d'attente:

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

Charge l'objet de sous-file d'attente. Vous pouvez manipuler cela pour récupérer ou mettre à jour votre file d'attente d'entités.

Pour obtenir les articles:

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

Pour mettre à jour les éléments, ajoutez un autre élément au tableau $ items, puis enregistrez l'objet entité:

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

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

$entity_subqueue->save();

Voila!

Vous pouvez vérifier dans la base de données que votre file d'attente d'entités est mise à jour:

select * from entity_subqueue__items where bundle = :sid;

Je voudrais également ajouter qu'il existe une excellente alternative à l'utilisation de entityqueue dans Drupal 8: le module Config Pages . Il vous permet de créer des ensembles d'entités qui n'ont qu'une seule entité. Vous pouvez ensuite ajouter tout type de champ que vous souhaitez, y compris les champs de référence d'entité. J'ai récemment remplacé une file d'attente d'entité sur un projet par une page de configuration avec un champ de référence d'entité, et j'ai préféré l'expérience utilisateur.

oknate
la source
0

Il existe également un raccourci pour charger la sous-file d'attente: \Drupal\entityqueue\Entity\EntitySubqueue::load($sid);

rémy
la source