Basta saber se o Drush é capaz de excluir nós de um determinado tipo de conteúdo.
Algo como: $ drush delete-node --type=MyContentType
Se não for possível, posso criar um método como esse?
Basta saber se o Drush é capaz de excluir nós de um determinado tipo de conteúdo.
Algo como: $ drush delete-node --type=MyContentType
Se não for possível, posso criar um método como esse?
Respostas:
Você pode criar uma função da seguinte maneira:
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);
}
}
Nota - Você também pode usar uma SELECT
consulta simples , mas, ao trabalhar com entidades, parece mais sensato / prática comum usar o EntityFieldQuery .
Também deve ser muito fácil alterar ou adicionar argumentos. Você também pode colocá-lo em um comando Drush com bastante facilidade - há um exemplo de como fazer isso no repositório Drush (verifique a seção Comandos na parte inferior).
Instale o módulo devel e use drush para excluir todos os nós,
$ drush genc --kill 0 0
Você também pode dar uma opção de tipo,
$ drush genc --kill --types=article 0 0
devel_generate
módulo está incluído no devel, mas precisa ser ativado com o drush en devel_generate
genc normalmente é usado para criar nós, então o 0 0 no final está dizendo para não criar nada de novo, e o --kill para remover o que já existe.
Eu acho que você pode usando o comando abaixo
drush node_delete <nid>
EDIT: Encontrou um módulo que faz algo / relacionado à pergunta
http://drupal.org/project/delete_all
Uso
Drush
drush delete-all
Exemplo: drush delete-all article
delete_all
ainda não foi portado para o Drupal 8 , mas a resposta genc funciona.
Algo assim funcionaria (não testado):
$query = new EntityFieldQuery();
$entities = $query->entityCondition('entity_type', 'node', '=')
->entityCondition('bundle', 'Announcements')
->execute();
$nids = array_keys($entities['node']);
node_delete_multiple($nids);
Isso encontrará todos os nós com o tipo de conteúdo Annoucements
usando EntityFieldQuery()
. Em seguida, obtém todo o $nids
resultado e os exclui usando node_delete_multiple()
.
Você pode pegar esse código, colocá-lo em um arquivo PHP separado e executá-lo com drush scr
.
O uso da API garantirá que todos os ganchos adequados sejam acionados. Entre outras coisas, eles também excluirão as revisões do nó e os dados do campo (e suas revisões) para que você não tenha dados órfãos no banco de dados.
Existem algumas boas idéias sobre este tópico. Se você realmente não deseja fazer nenhuma programação e deseja usar o Drush, pode consultar o módulo contribuído Excluir tudo :
Drush drush excluir tudo Exemplo: drush delete-all article Drush na versão Drupal 7 Exclua todos os nós, nós de um tipo ou usuários de conteúdo específico. Exemplos: drush delete-all article Exclua todos os nós do artigo. drush delete-all all Excluir nós de todos os tipos. drush delete-all --reset Exclui nós de todos os tipos e redefine os contadores de nós, revisões e comentários. drush delete-all users Exclua usuários. Opções: --reset Redefine o contador para tabelas de nó, revisão e comentário. --roles escolhem papéis Aliases: da
VBO tem integração Drush. Crie uma visualização VBO dos nós, execute-a via Drush (usando drush vbo-execute
), passe o tipo de nó como argumento.
drush entity:delete node --bundle=my_content_type
Você também pode criar um script drush (digamos que seja chamado "bulk_delete.php" e seja colocado na pasta raiz do Drupal):
#!/usr/bin/env drush
$res = db_delete('node')
->condition('type', 'mycontenttype', '=')
->execute();
echo "deleted:" . $res;
Esta é absolutamente a maneira mais rápida de fazer isso: uma consulta direta ao banco de dados, usando a função do Drupal db_delete
Uso:
:~# cd /var/www/www.mysite.com
:~# drush --uri=www.mysite.com scr bulk_delete.php
Doc: https://api.drupal.org/api/drupal/includes!database!database.inc/function/db_delete/7
Aviso: este processo não exclui os dados de seus campos. De qualquer forma, o mesmo processo pode ser aplicado a esses campos (observando a coluna "pacote configurável" de cada campo). Por exemplo:
#!/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";
}
Onde "mycontenttype" é o usado na primeira consulta.
'nid' > 5000
?
Drupal 7
Experimente o seguinte linux, ele remove todos os nós MyContentType do Drupal:
drush eval '$res = (new EntityFieldQuery)->entityCondition("entity_type", "node")->entityCondition('bundle', 'MyContentType')->execute(); entity_delete_multiple("node", array_keys(reset($res)));'
Ou você pode remover todas as entidades com base no nome do tipo de entidade (por exemplo, nó):
drush eval '$res = (new EntityFieldQuery)->entityCondition("entity_type", "node")->execute(); entity_delete_multiple("node", array_keys(reset($res)));'
Nota: node
é o nome do tipo de entidade, você pode alterá-lo, se necessário.
Se você receber erros de memória ou de tempo limite, adicione os seguintes conjuntos imediatamente antes do $res
:
ini_set('memory_limit', -1); ini_set('max_execution_time', 0);
Para excluir todos os nós de um tipo de conteúdo específico, tente executar o seguinte comando via drush:
drush eval '$res = (new EntityFieldQuery)->entityCondition("entity_type", "node")->entityCondition('bundle', 'MyContentType')->execute(); entity_delete_multiple("node", array_keys(reset($res)));'
Onde MyContentType é o nome do Tipo de Conteúdo da sua máquina (por exemplo, Página).
Para nós individuais:
$ drush php-eval 'node_delete($node->nid);'
drush php-eval
Avalie o código php arbitrário após a inicialização do Drupal
Atualizando a resposta fornecida por @kenorb.
No Drupal 8
drush eval '$nids = \Drupal::entityQuery('node')->execute(); $storage = Drupal::entityTypeManager()->getStorage('node'); $e = $storage->loadMultiple($nids); $storage->delete($e);'
Você pode usar
drush node_delete NID
para excluir um nó específico, mas se você deseja excluir todos os nós por tipo de conteúdo, acho que você pode criar um plugin drush usando a API do lote.
Você também pode fazer isso com o módulo devel, conforme respondido em Posso excluir nós de um determinado tipo de conteúdo com o Drush?
Instale o módulo devel e use drush para excluir todos os nós,
$ drush genc --kill 0 0
Você também pode dar uma opção de tipo,
$ drush genc --kill --types = article 0 0