답변:
이를위한 모듈이 있습니다 (TM).
대량 삭제를 참조하십시오 .
node_delete_multiple ()을 한 번 호출하여 수천 개의 노드를 삭제할 때 시간 초과 또는 메모리 문제를 피하기 위해 배치 API를 사용하여 노드를 삭제합니다.
대량 삭제는 버려진 모듈입니다. 대안을보십시오 :
영감을 얻기 위해 Devel Generate 모듈을 살펴보면 "content kill"기능이 있습니다 devel_generate_content_kill
.
function devel_generate_content_kill($values) { $results = db_select('node', 'n') ->fields('n', array('nid')) ->condition('type', $values['node_types'], 'IN') ->execute(); foreach ($results as $result) { $nids[] = $result->nid; } if (!empty($nids)) { node_delete_multiple($nids); drupal_set_message(t('Deleted %count nodes.', array('%count' => count($nids)))); } }
따라서 Devel Generate를 사용하여 모든 노드를 삭제하지만 새 노드를 만들지 않거나 example.com/devel/php를 사용하여 devel_generate_content_kill(array('node_types' => array('my_node_type')));
직접 호출하려고 합니다.
Drupal 8 에서 EntityStorageInterface :: delete () 메소드 와 함께 entityQuery () 메소드를 사용하는 방법이 있습니다 .
$result = \Drupal::entityQuery("node")
->condition("type", "YOUR_CONTENT_TYPE_NAME")
// If the update is being executed via drush entityQuery will only
// return the content uid 0 have access to. To return all set
// accessCheck to false since it defaults to TRUE.
->accessCheck(FALSE)
->execute();
$storage_handler = \Drupal::entityTypeManager()->getStorage("node");
$entities = $storage_handler->loadMultiple($result);
$storage_handler->delete($entities);
다른 필터 / 조건을 적용해야하는 경우 QueryInterface 인터페이스 페이지를 확인할 수 있습니다
편집 (다른 방법으로 @ 4k4 덕분에) :
$storage_handler = \Drupal::entityTypeManager()->getStorage("node");
$entities = $storage_handler->loadByProperties(["type" => "YOUR_CONTENT_TYPE_NAME"]);
$storage_handler->delete($entities);
코드를 테스트하려면 다음을 사용할 수 있습니다.
drush php-eval '$storage_handler = \Drupal::entityTypeManager()->getStorage("node"); $entities = $storage_handler->loadByProperties(["type" => "article"]); $storage_handler->delete($entities);'
모든 기사가 삭제됩니다.
$entities = $storage_handler->loadByProperties(['type' => 'YOUR_CONTENT_TYPE_NAME']);
entityQuery
하면 accessCheck
on을 설정해야한다는 점에 주목할 가치가 있습니다 . 그렇지 않으면 drush에서 실행하면 기본적으로 accessCheck가 true로 설정되고 uid 0에 액세스 할 수없는 노드는 반환되지 않습니다.
drupal 설치 루트에 아래 코드로 파일을 작성하고 파일을 실행하십시오.
<?php
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$aquery= db_query("SELECT nid FROM {node} AS n WHERE n.type = 'company'");
while ($row = db_fetch_object($aquery)) {
node_delete($row->nid);
}
?>
Drupal 7에서 다음을 입력하여 Devel 모듈의 Execute PHP Code 부분을 사용하여 수행 할 수 있습니다.
$result= db_query("SELECT nid FROM {node} AS n WHERE n.type = 'TYPE'");
foreach ($result as $record) {
node_delete($record->nid);
}
Drush 및 모든 모듈 삭제 를 사용하는 경우 터미널에서이를 수행하십시오 .
drush delete-all [content-type-machine-name]
Examples:
drush delete-all article Delect all article nodes.
drush delete-all all Delete nodes of all types.
drush delete-all --reset Delete nodes of all types, and reset node, revision and comment counters.
drush delete-all users Delete users.
Options:
--reset Reset counter for node, revision and comment tables.
--roles pick roles
drush 모듈을 사용하여 drush를 사용하십시오.
drush genc 0 --types=article --kill
또는 여기에 설명 된대로 UI에서 : http://befused.com/drupal/delete-nodes-devel
devel_generate
활성화해야하는 Devel 하위 모듈 입니다. 그리고 여러 유형의 경우drush genc 0 --kill --types="article, page"
모든 모듈 삭제를 사용 하며 D8과 잘 작동하며 매우 유용한 drush 명령을 제공합니다. 예를 들어, article
컨텐츠 유형 의 모든 컨텐츠를 삭제하려면 다음을 수행하십시오 .
drush delete-all article
마이그레이션 모듈을 활성화 한 경우 다음을 사용할 수 있습니다.
$ drush migrate-wipe <content-type>
Drush를 사용하는 일반적인 마이그레이션 명령을 참조하십시오 .
이 모듈은 사이트에서 모든 컨텐츠 및 / 또는 사용자를 삭제하는 데 사용됩니다. 이것은 주로 개발자 도구이며 여러 경우에 유용 할 수 있습니다
https://www.drupal.org/project/delete_all
일괄 삭제 모듈은 배치 API를 사용하여 특정 노드 유형의 모든 노드를 삭제합니다. 적은 수의 노드에는 VBO (Views Batch Operations) 모듈을 사용하는 것이 좋습니다. 그러나 10.000 개의 노드를 삭제해야하는 경우이 모듈이 더 나은 옵션 일 수 있습니다.
프로그래밍 방식으로 내용 유형의 모든 노드를 삭제하십시오. 여기에 도우미 기능이 있습니다.
function _delete_all_nodes_of_type($type = '') {
// Return all nids of nodes of type.
$nids = db_select('node', 'n')
->fields('n', array('nid'))
->condition('n.type', $type)
->execute()
->fetchCol(); // returns an indexed array
if (!empty($nids)) {
node_delete_multiple($nids);
drupal_set_message(format_plural(count($nids), count($nids) . ' node Deleted.', count($nids) . ' nodes Deleted.'));
}
}
db_delete 사용하여 모듈이 필요하지 않습니다.
<?php
db_delete('node')
->condition('type', 'MY_CONTENT_TYPE')
->execute();
?>
편집 / 경고 : 아래 Berdir의 의견을 참조하십시오. 이 방법은 노드와 관련된 모든 데이터를 정리하지 않습니다.
대구하지 않으려면이 모듈을 사용해보십시오 : https://drupal.org/project/total_control
대시 보드-> 컨텐츠로 이동하여 모든 컨텐츠를 선택하고 (컨텐츠 유형별로 필터링 할 수 있음) "항목 삭제"를 선택하십시오.