через прототип с forEach (), который должен пропустить свойства цепи прототипа:
Object.prototype.each = function(f) {
var obj = this
Object.keys(obj).forEach( function(key) {
f( key , obj[key] )
});
}
//print all keys and values
var obj = {a:1,b:2,c:3}
obj.each(function(key,value) { console.log(key + " " + value) });
// a 1
// b 2
// c 3
В общем ¹, да, каскад удаляет, сделаны в той же транзакции (или подтранзакция), как Ваш оригинал удаляет. Необходимо прочитать документацию SQL-сервера, все же.
¹ исключение то, если Вы используете базу данных, которая не поддерживает транзакции, как MySQL с таблицами MyISAM.
Каскад удаляет, являются действительно атомарными, они были бы мало полезны без того свойства. Это находится в документации.
Стоит указать, что любое каскадное событие должно быть атомарным (т.е. с в транзакции). Но, как Joel Coehoorn указывает, проверьте документацию на свою базу данных.