Fix id references
This commit is contained in:
parent
5bf2d1ff23
commit
96787ad25f
22
lib/dao.js
22
lib/dao.js
|
@ -85,7 +85,7 @@ DataAccessObject.create = function (data, callback) {
|
|||
data = {};
|
||||
}
|
||||
|
||||
if (data instanceof Array) {
|
||||
if (Array.isArray(data)) {
|
||||
var instances = [];
|
||||
var errors = Array(data.length);
|
||||
var gotError = false;
|
||||
|
@ -117,7 +117,7 @@ DataAccessObject.create = function (data, callback) {
|
|||
|
||||
var obj;
|
||||
// if we come from save
|
||||
if (data instanceof Model && !data.id) {
|
||||
if (data instanceof Model && !getIdValue(this, data)) {
|
||||
obj = data;
|
||||
} else {
|
||||
obj = new Model(data);
|
||||
|
@ -182,6 +182,16 @@ function stillConnecting(dataSource, obj, args) {
|
|||
return true;
|
||||
};
|
||||
|
||||
function getIdValue(m, data) {
|
||||
return data && data[m.dataSource.idName(m.modelName)];
|
||||
}
|
||||
|
||||
function setIdValue(m, data, value) {
|
||||
if(data) {
|
||||
data[m.dataSource.idName(m.modelName)] = value;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update or insert
|
||||
*/
|
||||
|
@ -189,7 +199,7 @@ DataAccessObject.upsert = DataAccessObject.updateOrCreate = function upsert(data
|
|||
if (stillConnecting(this.dataSource, this, arguments)) return;
|
||||
|
||||
var Model = this;
|
||||
if (!data.id) return this.create(data, callback);
|
||||
if (!getIdValue(this, data)) return this.create(data, callback);
|
||||
if (this.dataSource.connector.updateOrCreate) {
|
||||
var inst = new Model(data);
|
||||
this.dataSource.connector.updateOrCreate(Model.modelName, inst.toObject(true), function (err, data) {
|
||||
|
@ -203,7 +213,7 @@ DataAccessObject.upsert = DataAccessObject.updateOrCreate = function upsert(data
|
|||
callback(err, obj);
|
||||
});
|
||||
} else {
|
||||
this.findById(data.id, function (err, inst) {
|
||||
this.findById(getIdValue(this, data), function (err, inst) {
|
||||
if (err) return callback(err);
|
||||
if (inst) {
|
||||
inst.updateAttributes(data, callback);
|
||||
|
@ -276,8 +286,8 @@ DataAccessObject.findById = function find(id, cb) {
|
|||
this.dataSource.connector.find(this.modelName, id, function (err, data) {
|
||||
var obj = null;
|
||||
if (data) {
|
||||
if (!data.id) {
|
||||
data.id = id;
|
||||
if (!getIdValue(this, data)) {
|
||||
setIdValue(this, data, id);
|
||||
}
|
||||
obj = new this();
|
||||
obj._initProperties(data, false);
|
||||
|
|
Loading…
Reference in New Issue