Apa cara yang tepat untuk mendapatkan barang dari entitasqueue?

9

Saya mengalami kesulitan menemukan contoh API untuk entitasqueue di Drupal 8.

Saya akhirnya menulis permintaan untuk mendapatkan item.

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

Tetapi saya ingin menggunakan fungsi bawaan jika memungkinkan. Di mana fungsi untuk mengambil item dari antrian entitas?

oknate
sumber
Sama seperti di D7 - \ Drupal :: queue ('my queue') -> claimItem ()
Saya tidak berpikir itu sama. Ada tabel antrian, yang menggunakan objek DatabaseQueue. Ini adalah modul entitasqueue. Saya mencoba contoh Anda, dan itu tidak berhasil, dan menggali ke dalam kode, sepertinya objek DatabaseQueue melihat tabel dengan kolom seperti "nama", yang hilang dari tabel entitas_subqueue__items.
oknate
Ah maaf, saya tidak menggunakan modul entitasqueue.

Jawaban:

12

Diberi $ sid adalah id subqueue Anda:

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

Memuat objek subqueue. Anda dapat memanipulasi ini untuk mengambil atau memperbarui entitas Anda.

Untuk mendapatkan barang:

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

Untuk memperbarui item, tambahkan item lain ke array $ items dan kemudian simpan objek entitas:

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

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

$entity_subqueue->save();

Voila!

Anda dapat memeriksa di database bahwa antrian entitas Anda diperbarui:

select * from entity_subqueue__items where bundle = :sid;

Saya juga ingin menambahkan bahwa ada alternatif yang bagus untuk menggunakan entitasqueue di Drupal 8: modul Config Pages . Ini memungkinkan Anda untuk membuat bundel entitas yang hanya memiliki satu entitas. Anda kemudian dapat menambahkan jenis bidang apa pun yang Anda suka, termasuk bidang referensi entitas. Saya baru-baru ini menggantikan antrian entitas pada proyek dengan halaman konfigurasi dengan bidang referensi entitas, dan saya lebih suka pengalaman pengguna.

oknate
sumber
0

Ada juga jalan pintas untuk memuat subqueue: \Drupal\entityqueue\Entity\EntitySubqueue::load($sid);

Remy
sumber