| 7 node.module | node_delete_multiple($nids) |
| 8 node.module | node_delete_multiple($nids) |
Deletes multiple nodes.
Parameters
$nids: An array of node IDs.
4 calls to node_delete_multiple()
- BookTestCase::testBookDelete in modules/
book/ book.test - Tests the access for deleting top-level book nodes.
- node_delete in modules/
node/ node.module - Deletes a node.
- node_multiple_delete_confirm_submit in modules/
node/ node.admin.inc - Form submission handler for node_multiple_delete_confirm().
- node_user_delete in modules/
node/ node.module - Implements hook_user_delete().
File
- modules/
node/ node.module, line 1245 - The core that allows content to be submitted to the site. Modules and scripts may programmatically submit nodes using the usual form API pattern.
Code
function node_delete_multiple($nids) {
$transaction = db_transaction();
if (!empty($nids)) {
$nodes = node_load_multiple($nids, array());
try {
foreach ($nodes as $nid => $node) {
// Call the node-specific callback (if any):
node_invoke($node, 'delete');
module_invoke_all('node_delete', $node);
module_invoke_all('entity_delete', $node, 'node');
field_attach_delete('node', $node);
// Remove this node from the search index if needed.
// This code is implemented in node module rather than in search module,
// because node module is implementing search module's API, not the other
// way around.
if (module_exists('search')) {
search_reindex($nid, 'node');
}
}
// Delete after calling hooks so that they can query node tables as needed.
db_delete('node')->condition('nid', $nids, 'IN')->execute();
db_delete('node_revision')->condition('nid', $nids, 'IN')->execute();
db_delete('history')->condition('nid', $nids, 'IN')->execute();
db_delete('node_access')->condition('nid', $nids, 'IN')->execute();
}
catch (Exception $e) {
$transaction->rollback();
watchdog_exception('node', $e);
throw $e;
}
// Clear the page and block and node_load_multiple caches.
entity_get_controller('node')->resetCache();
}
}
Comments
Argument length limit
PermalinkThe number of nodes that can be loaded into memory in a single query is limited by the PDO layer, the database driver, configuration details, and of course, available memory. Passing too large an argument array to this function can result in the cryptic error message General error: 1 too many SQL variables.
A documentation bug has been posted to note the limited argument length.
Shouldn't it just work instead
PermalinkArguably it should just work with unlimited arguments. It would be trivial to loop through mod N times and call each node delete in say... blocks of 25, or 50, or 100 nids. Why not ?