2016-04-26 30 views
0

任務是刪除滿足某些指定條件的實體。我該怎麼做 ?在某些條件下刪除實體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(); 

但代碼返回:致命錯誤:調用未定義的方法Drupal的\核心\ CONFIG \實體\查詢\查詢::刪除()

回答

0

你需要先得到你的實體,你其實可以前刪除它們。更新這些方法或從中獲取信息也需要此方法。希望下面的代碼幫助:)

$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(); 
} 
0

要查詢實體,你可以使用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(); 
} 
+2

儘管這段代碼是受歡迎的,並且可能會提供一些幫助,但如果它包含* how *和* why *的解釋](// meta.stackexchange.com/q/114762)這解決了這個問題。請記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。 –

0

錯誤消息從事實上你正在使用查詢配置的實體類沒有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()

0

使用實體存儲的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); 

https://stackoverflow.com/a/43786945/442022服用。