在某些情况下删除实体 Drupal 8

Delete entity under some conditions Drupal 8

任务是删除满足一些指定条件的实体。我该怎么做?

$current_user = \Drupal::currentUser()->id();
$storage = \Drupal::entityManager()->getStorage('context');

$query = $storage->getQuery()->condition('user_id', $current_user);

$query = $storage->getQuery()->delete();
$query->condition('user_id', $current_user);
$query->condition('key_text', $key);

$query->execute();

但是代码returns:致命错误:调用未定义的方法Drupal\Core\Config\Entity\Query\Query::delete()

您需要先获取您的实体,然后才能真正删除它们。更新它们或从中获取信息也需要此方法。希望下面的代码能帮到您 :)

$current_user = \Drupal::currentUser()->id();    

$ids = \Drupal::entityQuery('context')
          ->condition('user_id', $current_user)
          ->execute();

$itemsToDelete = $this->entityTypeManager->getStorage('context')
          ->loadMultiple($ids);


foreach ($itemsToDelete as $item) {
   $item->delete();
}

要查询实体,您可以使用 entityQuery,下面的示例使用它。

// Get all users with email containing "xyz"
$query = \Drupal::entityQuery('user')
  ->condition('mail', "XYZ", 'CONTAINS');
$uids = $query->execute();

// Load these entities ($uids) in our case using storage controller.
// We call loadMultiple method and give $uids array as argument.     
$itemsToDelete = \Drupal::entityTypeManager()->getStorage('user')
  ->loadMultiple($uids);

// Loop through our entities and deleting them by calling by delete method.
foreach ($itemsToDelete as $item) {
  $item->delete();
}

错误消息是由于您用于查询配置实体的 class 没有 delete() 方法。对于内容实体也是如此。 delete()方法是由实体实现的,所以正确的代码类似下面

$storage = \Drupal::entityTypeManager()->getStorage('context');
$query = $storage->getQuery();

$ids = $query->condition('user_id', $current_user)
  ->condition('key_text', $key)
  ->execute();

foreach ($storage->loadMultiple($ids) as $entity) {
  $entity->delete();
}

参见 entity.query service deprecated in favor of EntityStorageInterface::getQuery()

使用实体存储的 delete() 方法删除多个实体。无需遍历所有这些。

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

$storage_handler = \Drupal::entityTypeManager()->getStorage($entity_type);
$entities = $storage_handler->loadMultiple($tids);
$storage_handler->delete($entities);

取自

我知道它很旧,但我遇到了这个,我想我应该 post..
我有一个自定义实体 table 我想从中删除项目.. 我不是 100% 确定此方法的含义,但我想 它不会调用任何实体挂钩 或任何东西,但它会提供更多的性能。

$database = \Drupal::service('database');
$query = $database->delete('my_custom_entity_table');
$query->condition('my_field', $value_to_check_for);
$query->execute();