Cách thích hợp để có được các mục từ một thực thể là gì?


9

Tôi đã gặp khó khăn khi tìm các ví dụ API cho thực thể trong Drupal 8.

Tôi đã kết thúc việc viết một truy vấn để có được các mục.

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

Nhưng tôi muốn sử dụng một chức năng tích hợp nếu có thể. Chức năng lấy các mục từ hàng đợi thực thể ở đâu?


Giống như trong D7 - \ Drupal :: queue ('my queue') - >aimItem ()

Tôi không nghĩ đó là như nhau. Có một hàng đợi bảng, sử dụng đối tượng DatabaseQueue. Đây là mô-đun thực thể. Tôi đã thử ví dụ của bạn, và nó không hoạt động, và đào sâu vào mã, có vẻ như đối tượng DatabaseQueue đang xem một bảng có các cột như "name", bị thiếu trong bảng entity_subqueue__items.
oknate

À xin lỗi, tôi không sử dụng mô đun thực thể.

Câu trả lời:


12

Cho $ sid là id cấp dưới của bạn:

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

Tải đối tượng subqueue. Bạn có thể thao tác điều này để lấy hoặc cập nhật thực thể của bạn.

Để có được các mặt hàng:

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

Để cập nhật các mục, thêm một mục khác vào mảng $ items và sau đó lưu đối tượng thực thể:

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

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

$entity_subqueue->save();

Voila!

Bạn có thể kiểm tra trong cơ sở dữ liệu rằng hàng đợi thực thể của bạn được cập nhật:

select * from entity_subqueue__items where bundle = :sid;

Tôi cũng muốn nói thêm rằng có một sự thay thế tuyệt vời cho việc sử dụng thực thể trong Drupal 8: mô-đun Cấu hình trang . Nó cho phép bạn tạo các gói thực thể chỉ có một thực thể. Sau đó, bạn có thể thêm bất kỳ loại trường nào bạn thích, bao gồm các trường tham chiếu thực thể. Gần đây tôi đã thay thế một hàng đợi thực thể trên một dự án bằng một trang cấu hình bằng trường tham chiếu thực thể và tôi thích trải nghiệm người dùng hơn.


0

Ngoài ra còn có một phím tắt để tải subqueue: \Drupal\entityqueue\Entity\EntitySubqueue::load($sid);

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.