วิธีที่เหมาะสมในการรับไอเท็มจากเอนทิตีคืออะไร


9

ฉันมีปัญหาในการค้นหาตัวอย่าง API สำหรับเอนทิตีใน Drupal 8

ฉันสิ้นสุดการเขียนแบบสอบถามเพื่อรับรายการ

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

แต่ฉันต้องการใช้ฟังก์ชันในตัวถ้าเป็นไปได้ ฟังก์ชั่นสำหรับดึงรายการจากคิวเอนทิตี้อยู่ที่ไหน


เช่นเดียวกับใน D7 - \ Drupal :: คิว ('คิวของฉัน') - >aimItem ()

ฉันไม่คิดว่ามันจะเหมือนกัน มีคิวของตารางที่ใช้วัตถุ DatabaseQueue นี่คือโมดูลเอนทิตี้ ฉันลองตัวอย่างของคุณแล้วมันใช้งานไม่ได้และขุดลงในโค้ดดูเหมือนว่าวัตถุ DatabaseQueue กำลังดูตารางที่มีคอลัมน์เช่น "ชื่อ" ซึ่งหายไปจากตารางเอนทิตี
ตกลง

ขอโทษฉันไม่ได้ใช้โมดูลเอนทิตี้

คำตอบ:


12

รับ $ sid เป็นรหัสย่อยของคุณ:

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

โหลดวัตถุ subqueue คุณสามารถจัดการสิ่งนี้เพื่อดึงหรืออัพเดทเอนทิตี้ของคุณ

ในการรับไอเท็ม:

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

ในการอัพเดตไอเท็มให้เพิ่มไอเท็มอื่นในอาร์เรย์ $ items จากนั้นบันทึกออบเจ็กต์เอนทิตี:

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

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

$entity_subqueue->save();

Voila!

คุณสามารถตรวจสอบในฐานข้อมูลว่าคิวเอนทิตีของคุณได้รับการอัพเดต:

select * from entity_subqueue__items where bundle = :sid;

ฉันอยากจะเพิ่มว่ามีทางเลือกที่ดีในการใช้ entityqueue ใน Drupal 8: โมดูลConfig Pages อนุญาตให้คุณสร้างบันเดิลเอนทิตีที่มีเอนทิตีเดียวเท่านั้น จากนั้นคุณสามารถเพิ่มประเภทฟิลด์ใดก็ได้ที่คุณต้องการรวมถึงฟิลด์การอ้างอิงเอนทิตี ฉันเพิ่งแทนที่คิวเอนทิตีในโครงการด้วยเพจปรับแต่งด้วยฟิลด์การอ้างอิงเอนทิตีและฉันต้องการประสบการณ์ผู้ใช้


0

นอกจากนี้ยังมีทางลัดเพื่อโหลด subqueue: \Drupal\entityqueue\Entity\EntitySubqueue::load($sid);

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.