回答:
そのためのモジュールがあります(TM)。
一括削除を参照してください。
バッチAPIを使用してノードを削除し、node_delete_multiple()の1回の呼び出しで数千のノードを削除するときのタイムアウトまたはメモリの問題を回避します。
一括削除は放棄されたモジュールです。代替案を参照してください:
インスピレーションのためにDevel Generateモジュールを見ると、その「コンテンツキル」機能があります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では、1つの方法として、entityQuery()メソッドとEntityStorageInterface :: delete()メソッドを使用します。
$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 を設定する必要があることに注意してください。そうしないと、それを急いで実行した場合、デフォルトで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
ビューの一括操作では、BatchAPI対応の構成可能なノード管理画面が提供されます。この画面では、種類によるフィルタリング、検索条件に一致するすべてのノードの選択などが可能です。
これがDrupal 6での私の実践的なソリューションです。バッチ削除に加えて、ノードを一括編集したり、他の多くのことを行うことができます。
Drupal 7バージョンはまだ準備ができていないように見えますが、D7リリースのためにそのモジュールを見ています。
Develモジュールで、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"
このモジュールは、サイトからすべてのコンテンツやユーザーを削除するために使用されます。これは主に開発者ツールであり、いくつかの場合に役立ちます
https://www.drupal.org/project/delete_all
一括削除モジュールは、バッチAPIを使用して特定のノードタイプのノードを削除します。少数のノードに対してViews Batch Operationsモジュール(VBO)を使用することをお勧めします。ただし、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)を試すことができます。
[ダッシュボード]-> [コンテンツ]に移動し、すべてのコンテンツを選択して(コンテンツタイプでフィルタリングできます)、[アイテムの削除]を選択します