엔티티 큐에서 아이템을 얻는 적절한 방법은 무엇입니까?


9

Drupal 8에서 entityqueue에 대한 API 예제를 찾는 데 문제가있었습니다.

나는 아이템을 얻기 위해 쿼리를 작성했다.

$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 :: queue ( 'my queue')-> claimItem ()

나는 그것이 같지 않다고 생각합니다. DatabaseQueue 개체를 사용하는 테이블 큐가 있습니다. 이것은 entityqueue 모듈입니다. 예제를 시도했지만 작동하지 않고 코드를 파고 들자 DatabaseQueue 객체가 entity_subqueue__items 테이블에서 누락 된 "name"과 같은 열이있는 테이블을보고있는 것 같습니다.
oknate

아 죄송합니다. entityqueue 모듈을 사용하지 않습니다.

답변:


12

주어진 $ sid는 하위 대기열 ID입니다.

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

하위 대기열 객체를로드합니다. 엔티티 큐를 검색하거나 업데이트하기 위해이를 조작 할 수 있습니다.

품목을 얻으려면 :

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

항목을 업데이트하려면 $ items 배열에 다른 항목을 추가 한 다음 엔티티 객체를 저장하십시오.

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

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

$entity_subqueue->save();

짜잔!

데이터베이스에서 엔티티 큐가 업데이트되었는지 확인할 수 있습니다.

select * from entity_subqueue__items where bundle = :sid;

Drupal 8의 Config Pages 모듈 에서 entityqueue를 사용하는 것에 대한 훌륭한 대안이 있다고 덧붙이고 싶습니다 . 하나의 엔터티 만있는 엔터티 번들을 만들 수 있습니다. 그런 다음 엔터티 참조 필드를 포함하여 원하는 필드 유형을 추가 할 수 있습니다. 최근 프로젝트의 엔티티 대기열을 엔티티 참조 필드가있는 구성 페이지로 교체했으며 사용자 경험을 선호했습니다.


0

하위 대기열을로드하는 바로 가기도 있습니다. \Drupal\entityqueue\Entity\EntitySubqueue::load($sid);

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.