web-dev-qa-db-ja.com

entity_delete_multipleを使用して特定の語彙のすべての分類用語を削除するにはどうすればよいですか?

entity_delete_multipleを使用して、特定の語彙の分類用語をすべて削除したい。ノードの場合は正常に動作しています

$result = \Drupal::entityQuery('node')
      ->condition('type', 'page')
      ->execute();
  entity_delete_multiple('node', $result);

Taxonomy_termを変更してtags or any other vocabularyと入力するか、type by bundleを置き換えた場合

$result = \Drupal::entityQuery('taxonomy_term')
      ->condition('type', 'tags')
      ->execute();
  entity_delete_multiple('taxonomy_term', $result);

このようなエラーが発生しています。

Drupal\Core\Entity\Query\QueryException: 'type' not found in Drupal\Core\Entity\Query\Sql\Tables-> ensureEntityTable()(304/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php)。

また、ユーザー、ウォッチドッグ、およびプロファイルを削除するには、同じクエリが必要です。

それを行う方法はありますか?

2
Ajay Reddy

vidの代わりにtypeを使用してください。私はコードを試していませんが、以下を試します

$result = \Drupal::entityQuery('taxonomy_term')
      ->condition('vid', 'tags')
      ->execute();
  entity_delete_multiple('taxonomy_term', $result);

ここ は、entityQueryを使用する良い例です。

ユーザーを削除するには、entity_delete_multipleまたはuser_delete_multipleを使用できます

Uid 10のユーザーを削除するには

entity_delete_multiple('user', \Drupal::entityQuery('user')->condition('uid', '10', '=')->execute());

またはuidの配列をuser_delete_multipleに渡します

user_delete_multiple(array $uids);

コメントを削除する方法を知りません。

8
Suresh R

分類にはvidを使用します:

$result = \Drupal::entityQuery('taxonomy_term')
      ->condition('vid', 'tags')
      ->execute();

これは分類法のバンドルです。

3
4k4

特定の語彙の分類用語をすべて削除します。

試す

 $vid = 'name_of_the_vocabulary';
      $tids = \Drupal::entityQuery('taxonomy_term')
          ->condition('vid', $vid)
          ->execute();
      entity_delete_multiple('taxonomy_term', $tids);
2
DRUPWAY

私は質問がentity_delete_multipleについて具体的に尋ねるのを知っていますが、関数は廃止され、「前に」削除される予定ですDrupal 9。

/**
 * Delete all taxonomy terms from a vocabulary
 * @param $vid
 */
function delete_terms_from_vocab($vid) {

  $tids = Drupal::entityQuery('taxonomy_term')
    ->condition('vid', $vid)
    ->execute();

  if (empty($tids)) {
    return;
  }

  $storage_handler = \Drupal::entityManager()
    ->getStorage('taxonomy_term');
  $entities = $storage_handler->loadMultiple($tids);

  $storage_handler->delete($entities);
}
2
oknate

あなたは私のために働く以下のコードを試すことができます

 $vids = Vocabulary::loadMultiple();
    foreach ($vids as $vid) {
      if ($vid->label() == 'YourVocab') {
        $container = \Drupal::getContainer();
        $terms = $container->get('entity.manager')->getStorage('taxonomy_term')->loadTree($vid->id());
        if (!empty($terms)) {
          entity_delete_multiple('taxonomy_term', $terms);
        }
        break;
      }
}
1
vishal shah