不要怂,就是干,撸起袖子干!

Commit d6b0eafd by Sascha Depold

fixed association hell

1 parent 96976330
Showing with 20 additions and 30 deletions
...@@ -9,10 +9,9 @@ module.exports.Factory = function(Sequelize, sequelize) { ...@@ -9,10 +9,9 @@ module.exports.Factory = function(Sequelize, sequelize) {
Association.findAll({ where: whereConditions }, function(result) { Association.findAll({ where: whereConditions }, function(result) {
if(result.length > 0) { if(result.length > 0) {
var ids = Sequelize.Helper.Array.map(result, function(resultSet) { var ids = Sequelize.Helper.Array.map(result, function(resultSet) {
return resultSet[Sequelize.Helper.SQL.asTableIdentifier(backAssocName)] return resultSet[Sequelize.Helper.SQL.asTableIdentifier(assocName)]
}) })
Sequelize.Helper.log(ids)
Sequelize.Helper.log(table2.tableName)
table2.findAll({where: "id IN (" + ids.join(",") + ")"}, callback) table2.findAll({where: "id IN (" + ids.join(",") + ")"}, callback)
} else { } else {
if(callback) callback([]) if(callback) callback([])
...@@ -24,45 +23,36 @@ module.exports.Factory = function(Sequelize, sequelize) { ...@@ -24,45 +23,36 @@ module.exports.Factory = function(Sequelize, sequelize) {
return function(objects, callback) { return function(objects, callback) {
var self = this, var self = this,
Association = sequelize.tables[Sequelize.Helper.SQL.manyToManyTableName(assocName, backAssocName)].klass, Association = sequelize.tables[Sequelize.Helper.SQL.manyToManyTableName(assocName, backAssocName)].klass,
currentAssociations = null,
objectIds = Sequelize.Helper.Array.map(objects, function(obj) { return obj.id }) objectIds = Sequelize.Helper.Array.map(objects, function(obj) { return obj.id })
var getAssociatedObjects = function(callback) { var getAssociatedObjects = function(callback) {
self[Sequelize.Helper.SQL.addPrefix('get', assocName)](function(associations) { self[Sequelize.Helper.SQL.addPrefix('get', assocName)](callback)
Sequelize.Helper.log("current assocs:")
Sequelize.Helper.log(associations)
currentAssociations = associations
if(callback) callback(associations)
})
} }
var deleteObsoleteAssociations = function(callback) { var deleteObsoleteAssociations = function(currentAssociations, callback) {
var obsoleteAssociations = Sequelize.Helper.Array.select(currentAssociations, function(assoc) { return objectIds.indexOf(association.id) == -1 }), var obsoleteAssociations = Sequelize.Helper.Array.select(currentAssociations, function(assoc) { return objectIds.indexOf(assoc.id) == -1 }),
obsoleteIds = Sequelize.Helper.Array.map(obsoleteAssociations, function(assoc) { return assoc.id }) obsoleteIds = Sequelize.Helper.Array.map(obsoleteAssociations, function(assoc) { return assoc.id })
Sequelize.Helper.log(obsoleteIds)
if(obsoleteIds.length == 0) if(obsoleteIds.length == 0)
callback([]) callback([])
else else {
sequelize.query( var deleteOptions = {
Sequelize.sqlQueryFor('delete', {table: Association.tableName, where: "id IN (" + obsoleteIds.join(",") + ")", limit: null}), table: Association.tableName,
function(){ callback(obsoleteIds) } where: Sequelize.Helper.SQL.asTableIdentifier(assocName) + " IN (" + obsoleteIds.join(",") + ") AND " +
) Sequelize.Helper.SQL.asTableIdentifier(backAssocName) + " = " + self.id,
limit: null
}
sequelize.query( Sequelize.sqlQueryFor('delete', deleteOptions), function(){ callback(obsoleteIds) } )
} }
var createNewAssociations = function(obsoleteIds) {
}
var createNewAssociations = function(currentAssociations, obsoleteIds) {
var currentIds = Sequelize.Helper.Array.map(currentAssociations, function(assoc) { return assoc.id }), var currentIds = Sequelize.Helper.Array.map(currentAssociations, function(assoc) { return assoc.id }),
withoutExisting = Sequelize.Helper.Array.select(objects, function(o) { return currentIds.indexOf(o.id) == -1 }), withoutExisting = Sequelize.Helper.Array.select(objects, function(o) { return currentIds.indexOf(o.id) == -1 }),
savings = [] savings = []
Sequelize.Helper.log("current")
Sequelize.Helper.log(obsoleteIds)
Sequelize.Helper.log(currentIds)
Sequelize.Helper.log(withoutExisting)
Sequelize.Helper.log("withoutExisiting")
withoutExisting.forEach(function(o) { withoutExisting.forEach(function(o) {
Sequelize.Helper.log(o)
if((o instanceof table2) && (self.id != null) && (o.id != null)) { if((o instanceof table2) && (self.id != null) && (o.id != null)) {
var attributes = {} var attributes = {}
attributes[Sequelize.Helper.SQL.asTableIdentifier(backAssocName)] = self.id attributes[Sequelize.Helper.SQL.asTableIdentifier(backAssocName)] = self.id
...@@ -76,9 +66,9 @@ module.exports.Factory = function(Sequelize, sequelize) { ...@@ -76,9 +66,9 @@ module.exports.Factory = function(Sequelize, sequelize) {
}) })
} }
getAssociatedObjects(function() { getAssociatedObjects(function(associatedObjects) {
deleteObsoleteAssociations(function(obsolete) { deleteObsoleteAssociations(associatedObjects, function(obsolete) {
createNewAssociations(obsolete) createNewAssociations(associatedObjects, obsolete)
}) })
}) })
} }
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!