Was ist der geeignete Weg, um Elemente aus einer Entityqueue abzurufen?

9

Ich hatte Probleme, API-Beispiele für die Entityqueue in Drupal 8 zu finden.

Am Ende schrieb ich eine Abfrage, um die Artikel zu erhalten.

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

Aber ich möchte wenn möglich eine eingebaute Funktion verwenden. Wo ist die Funktion zum Abrufen von Elementen aus einer Entitätswarteschlange?

oknate
quelle
Das gleiche wie in D7 - \ Drupal :: queue ('meine Warteschlange') -> ClaimItem ()
Ich denke nicht, dass das dasselbe ist. Es gibt eine Tabellenwarteschlange, die das DatabaseQueue-Objekt verwendet. Dies ist ein Entityqueue-Modul. Ich habe Ihr Beispiel ausprobiert, und es funktioniert nicht. Wenn Sie sich in den Code vertiefen, sieht es so aus, als würde das DatabaseQueue-Objekt eine Tabelle mit Spalten wie "name" betrachten, die in der Tabelle entity_subqueue__items fehlen.
oknate
Entschuldigung, ich verwende kein Entityqueue-Modul.

Antworten:

12

Bei $ sid ist Ihre Subqueue-ID angegeben:

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

Lädt das Subqueue-Objekt. Sie können dies bearbeiten, um Ihre Entityqueue abzurufen oder zu aktualisieren.

So erhalten Sie die Artikel:

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

Um die Elemente zu aktualisieren, fügen Sie dem Array $ items ein weiteres Element hinzu und speichern Sie das Entitätsobjekt:

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

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

$entity_subqueue->save();

Voila!

Sie können in der Datenbank überprüfen, ob Ihre Entitätswarteschlange aktualisiert wurde:

select * from entity_subqueue__items where bundle = :sid;

Ich möchte auch hinzufügen, dass es eine großartige Alternative zur Verwendung von entityqueue in Drupal 8 gibt: das Config Pages- Modul. Sie können Entitätspakete erstellen, die nur eine Entität enthalten. Sie können dann einen beliebigen Feldtyp hinzufügen, einschließlich Entitätsreferenzfelder. Ich habe kürzlich eine Entitätswarteschlange in einem Projekt durch eine Konfigurationsseite mit einem Entitätsreferenzfeld ersetzt und die Benutzererfahrung bevorzugt.

oknate
quelle
0

Es gibt auch eine Verknüpfung zum Laden der Unterwarteschlange: \Drupal\entityqueue\Entity\EntitySubqueue::load($sid);

rémy
quelle