在某些情况下删除实体 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();
任务是删除满足一些指定条件的实体。我该怎么做?
$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();