エンティティキューからアイテムを取得する適切な方法は何ですか?


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オブジェクトを使用するテーブルキューがあります。これはエンティティキューモジュールです。私はあなたの例を試しましたが、それは機能しません、そしてコードを掘り下げて、DatabaseQueueオブジェクトが、entity_subqueue__itemsテーブルから欠落している "name"などの列を持つテーブルを探しているように見えます。
oknate 2016年

申し訳ありませんが、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でのエンティティキューの使用に代わる優れた方法として、構成ページモジュールがあることも付け加えておきます。エンティティが1つだけのエンティティバンドルを作成できます。次に、エンティティ参照フィールドを含め、任意のフィールドタイプを追加できます。私は最近、プロジェクトのエンティティキューをエンティティ参照フィールドのある構成ページに置き換え、ユーザーエクスペリエンスを優先しました。


0

サブキューをロードするショートカットもあります: \Drupal\entityqueue\Entity\EntitySubqueue::load($sid);

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.