Drush가 주어진 컨텐츠 유형의 노드를 삭제할 수 있는지 궁금합니다.
다음과 같은 것 : $ drush delete-node --type=MyContentType
가능하지 않다면 그런 방법을 만들 수 있습니까?
Drush가 주어진 컨텐츠 유형의 노드를 삭제할 수 있는지 궁금합니다.
다음과 같은 것 : $ drush delete-node --type=MyContentType
가능하지 않다면 그런 방법을 만들 수 있습니까?
답변:
다음과 같은 함수를 작성할 수 있습니다.
function MYMODULE_delete_all_the_things() {
$query = new EntityFieldQuery;
$result = $query->entityCondition('entity_type', 'node')
->propertyCondition('type', 'YOUR-CONTENT-TYPE')
->execute();
if (isset($result['node']) && count($result['node'])) {
$node_ids = array_keys($result['node']);
node_delete_multiple($node_ids);
}
}
참고-간단한 SELECT
쿼리를 사용할 수도 있지만 엔터티를 작업 할 때 EntityFieldQuery 를 사용하는 것이 더 합리적이고 일반적인 관행으로 보입니다 .
또한 인수를 쉽게 변경하거나 추가 할 수 있어야합니다. Drush 명령에 쉽게 넣을 수도 있습니다. Drush 리포지토리 에서이를 수행하는 방법에 대한 예가 있습니다 (아래 근처의 명령 섹션을 확인하십시오).
devel 모듈을 설치하고 drush를 사용하여 모든 노드를 삭제하십시오.
$ drush genc --kill 0 0
유형 옵션을 제공 할 수도 있습니다.
$ drush genc --kill --types=article 0 0
devel_generate
모듈은 devel에 포함되어 있지만 drush en devel_generate
일반적으로 genc를 사용하여 활성화해야 노드 를 만드는 데 사용 되므로 끝에 0 0은 새로운 것을 만들지 말고 이미 존재하는 것을 제거하라는 --kill을 알려줍니다.
아래 명령을 사용하여 할 수 있다고 생각합니다
drush node_delete <nid>
편집 : 질문과 관련이있는 모듈을 찾았습니다.
http://drupal.org/project/delete_all
용법
돌진
drush delete-all
예: drush delete-all article
delete_all
Drupal 8로 포팅되지 않았지만 genc answer가 작동합니다.
이와 같은 것이 작동합니다 (예상되지 않음).
$query = new EntityFieldQuery();
$entities = $query->entityCondition('entity_type', 'node', '=')
->entityCondition('bundle', 'Announcements')
->execute();
$nids = array_keys($entities['node']);
node_delete_multiple($nids);
를 Annoucements
사용하여 컨텐츠 유형의 모든 노드를 찾습니다 EntityFieldQuery()
. 그런 다음 $nids
결과에서 모든 것을 가져 와서을 사용하여 삭제했습니다 node_delete_multiple()
.
이 코드를 가져 와서 별도의 PHP 파일에 넣은 다음로 실행할 수 있습니다 drush scr
.
API를 사용하면 모든 적절한 후크가 실행됩니다. 특히 노드 개정 및 필드 데이터 (및 개정)도 삭제되므로 데이터베이스에 분리 된 데이터가 없습니다.
이 글타래에 대한 좋은 아이디어가 있습니다. 실제로 프로그래밍을하고 싶지 않고 Drush를 사용하려면 Delete All 기여 모듈을 볼 수 있습니다 .
돌진 삭제 모두 삭제 예 : 기사 전체 삭제 Drupal 7 버전의 Drush 모든 노드, 특정 컨텐츠 유형의 노드 또는 사용자를 삭제하십시오. 예 : drush delete-all article 모든 기사 노드를 무시합니다. drush delete-all all 모든 유형의 노드를 삭제합니다. drush delete-all --reset 모든 유형의 노드를 삭제하고 노드, 개정 및 주석 카운터를 재설정합니다. drush delete-all users 사용자를 삭제하십시오. 옵션 : --reset 노드, 개정 및 주석 테이블의 재설정 카운터. -역할은 역할을 선택합니다 별칭 : da
VBO에는 Drush 통합 기능이 있습니다. 노드에 대한 VBO보기를 작성하고 Drush (을 사용하여 drush vbo-execute
) 를 통해 실행 하고 노드 유형을 인수로 전달하십시오.
drush 스크립트를 생성 할 수도 있습니다 ( "bulk_delete.php"라고하며 Drupal 루트 폴더 아래에 있습니다).
#!/usr/bin/env drush
$res = db_delete('node')
->condition('type', 'mycontenttype', '=')
->execute();
echo "deleted:" . $res;
이것은 Drupal 함수 db_delete를 사용하여 db에 직접 쿼리하는 가장 빠른 방법입니다.
용법:
:~# cd /var/www/www.mysite.com
:~# drush --uri=www.mysite.com scr bulk_delete.php
문서 : https://api.drupal.org/api/drupal/includes!database!database.inc/function/db_delete/7
경고 :이 프로세스는 해당 필드의 데이터를 삭제하지 않습니다. 어쨌든 동일한 프로세스를 이러한 필드에 적용 할 수 있습니다 (각 필드의 "번들"열 참조). 예를 들면 다음과 같습니다.
#!/usr/bin/env drush
$field_tables = array(
'field_data_field_body',
'field_data_field_mycoolfield',
'field_revision_body',
'field_revision_field_mycoolfield'
);
foreach ($field_tables as $field_table) {
$res = db_delete($field_table)
->condition('bundle', 'mycontenttype', '=')
->execute();
echo "deleted:" . $res . "\n\n";
}
여기서 "mycontenttype"은 첫 번째 쿼리에서 사용 된 형식입니다.
'nid' > 5000
?
드루팔 7
다음 한 줄을 사용해보십시오. Drupal에서 모든 MyContentType 노드가 제거됩니다.
drush eval '$res = (new EntityFieldQuery)->entityCondition("entity_type", "node")->entityCondition('bundle', 'MyContentType')->execute(); entity_delete_multiple("node", array_keys(reset($res)));'
또는 엔티티 유형 이름 (예 : 노드)을 기반으로 모든 엔티티를 제거 할 수 있습니다.
drush eval '$res = (new EntityFieldQuery)->entityCondition("entity_type", "node")->execute(); entity_delete_multiple("node", array_keys(reset($res)));'
참고 : node
엔티티 유형 이름이며 필요한 경우 변경할 수 있습니다.
메모리 또는 시간 초과 오류가 발생하는 경우 다음 직전에 다음 세트를 추가 할 수 있습니다 $res
.
ini_set('memory_limit', -1); ini_set('max_execution_time', 0);
특정 컨텐츠 유형의 모든 노드를 삭제하려면 drush를 통해 다음 명령을 실행하십시오.
drush eval '$res = (new EntityFieldQuery)->entityCondition("entity_type", "node")->entityCondition('bundle', 'MyContentType')->execute(); entity_delete_multiple("node", array_keys(reset($res)));'
여기서 MyContentType은 시스템 컨텐츠 유형 이름 (예 : 페이지)입니다.
개별 노드의 경우 :
$ drush php-eval 'node_delete($node->nid);'
rush-php-eval
부트 스트랩 후 임의의 PHP 코드를 평가합니다 Drupal
@kenorb에서 제공 한 답변을 업데이트합니다.
드루팔 8에서
drush eval '$nids = \Drupal::entityQuery('node')->execute(); $storage = Drupal::entityTypeManager()->getStorage('node'); $e = $storage->loadMultiple($nids); $storage->delete($e);'
당신이 사용할 수있는
drush node_delete NID
특정 노드를 삭제하지만 콘텐츠 유형별로 모든 노드를 삭제하려면 배치 API를 사용하여 drush 플러그인을 만들 수 있습니다.
에 대답으로 당신은 또한 (STABLE) 모듈을 사용하여이 작업을 수행 할 수 Drush와 해당 콘텐츠 형식의 수 있습니까 삭제 노드?
devel 모듈을 설치하고 drush를 사용하여 모든 노드를 삭제하십시오.
$ drush genc --kill 0 0
유형 옵션을 제공 할 수도 있습니다.
$ drush genc --kill --types = article 0 0