diff --git a/lib/manager.js b/lib/manager.js index 4a8b6a7..5d8cc19 100644 --- a/lib/manager.js +++ b/lib/manager.js @@ -324,6 +324,30 @@ Manager.prototype.setBelongsToMany = function(model, key, models, relation, opti }); }; +Manager.prototype.setHasOne = function(model, key, value, relation, options) { + var Target = relation.relatedData.target; + var existing = Target.forge(model.related(key).attributes); + var target = Target.forge(value); + var fk = relation.relatedData.foreignKey; + + if (value !== null) { + if (existing.get(fk)) { + existing.set(fk, null); + } + else{ + target.set(fk, model.id); + return target.save(); + } + + return existing.save() + .then(function(){ + target.set(fk, model.id); + return target.save(); + + }); + } +}; + Manager.prototype.setHasMany = function(model, key, models, relation, options) { var existing = model.related(key);