Qual è il modo appropriato per ottenere elementi da un'entitàqueue?


9

Ho avuto problemi a trovare esempi di API per entityqueue in Drupal 8.

Ho finito per scrivere una query per ottenere gli articoli.

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

Ma mi piacerebbe usare una funzione integrata, se possibile. Dov'è la funzione per recuperare elementi da una coda di entità?


Lo stesso di D7 - \ Drupal :: queue ('my queue') -> claimItem ()

Non penso che sia lo stesso. C'è una coda di tabella che utilizza l'oggetto DatabaseQueue. Questo è il modulo entityqueue. Ho provato il tuo esempio, e non funziona, e scavando nel codice, sembra che l'oggetto DatabaseQueue stia guardando una tabella con colonne come "nome", che mancano nella tabella entity_subqueue__items.
oknate,

Ah scusa, non uso il modulo entityqueue.

Risposte:


12

Dato $ sid è il tuo ID subqueue:

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

Carica l'oggetto subqueue. Puoi manipolarlo per recuperare o aggiornare l'entitàqueue.

Per ottenere gli articoli:

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

Per aggiornare gli articoli, aggiungi un altro oggetto all'array $ items e quindi salva l'oggetto entità:

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

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

$entity_subqueue->save();

Ecco!

È possibile verificare nel database che la coda delle entità sia aggiornata:

select * from entity_subqueue__items where bundle = :sid;

Vorrei anche aggiungere che esiste una grande alternativa all'utilizzo di entityqueue in Drupal 8: il modulo Config Pages . Ti permette di creare fasci di entità che hanno una sola entità. È quindi possibile aggiungere qualsiasi tipo di campo desiderato, inclusi i campi di riferimento dell'entità. Di recente ho sostituito una coda di entità su un progetto con una pagina di configurazione con un campo di riferimento dell'entità e ho preferito l'esperienza dell'utente.


0

C'è anche una scorciatoia per caricare il sottorete: \Drupal\entityqueue\Entity\EntitySubqueue::load($sid);

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.