Support define fk with class name
This commit is contained in:
parent
8099f7edf2
commit
23004c12c1
|
@ -124,7 +124,7 @@ Model.hasMany = function hasMany(anotherClass, params) {
|
||||||
|
|
||||||
if (!params.through) {
|
if (!params.through) {
|
||||||
// obviously, anotherClass should have attribute called `fk`
|
// obviously, anotherClass should have attribute called `fk`
|
||||||
anotherClass.schema.defineForeignKey(anotherClass.modelName, fk);
|
anotherClass.schema.defineForeignKey(anotherClass.modelName, fk, this.modelName);
|
||||||
}
|
}
|
||||||
|
|
||||||
function find(id, cb) {
|
function find(id, cb) {
|
||||||
|
@ -201,7 +201,7 @@ Model.belongsTo = function (anotherClass, params) {
|
||||||
multiple: false
|
multiple: false
|
||||||
};
|
};
|
||||||
|
|
||||||
this.schema.defineForeignKey(this.modelName, fk);
|
this.schema.defineForeignKey(this.modelName, fk, anotherClass.modelName);
|
||||||
this.prototype['__finders__'] = this.prototype['__finders__'] || {};
|
this.prototype['__finders__'] = this.prototype['__finders__'] || {};
|
||||||
|
|
||||||
this.prototype['__finders__'][methodName] = function (id, cb) {
|
this.prototype['__finders__'][methodName] = function (id, cb) {
|
||||||
|
|
|
@ -461,15 +461,24 @@ Schema.prototype.tableName = function (modelName) {
|
||||||
* @param {String} className
|
* @param {String} className
|
||||||
* @param {String} key - name of key field
|
* @param {String} key - name of key field
|
||||||
*/
|
*/
|
||||||
Schema.prototype.defineForeignKey = function defineForeignKey(className, key) {
|
Schema.prototype.defineForeignKey = function defineForeignKey(className, key, foreignClassName) {
|
||||||
// quit if key already defined
|
// quit if key already defined
|
||||||
if (this.definitions[className].properties[key]) return;
|
if (this.definitions[className].properties[key]) return;
|
||||||
|
|
||||||
if (this.adapter.defineForeignKey) {
|
if (this.adapter.defineForeignKey) {
|
||||||
this.adapter.defineForeignKey(className, key, function (err, keyType) {
|
var cb = function (err, keyType) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
this.definitions[className].properties[key] = {type: keyType};
|
this.definitions[className].properties[key] = {type: keyType};
|
||||||
}.bind(this));
|
}.bind(this);
|
||||||
|
switch (this.adapter.defineForeignKey.length) {
|
||||||
|
case 4:
|
||||||
|
this.adapter.defineForeignKey(className, key, foreignClassName, cb);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
case 3:
|
||||||
|
this.adapter.defineForeignKey(className, key, cb);
|
||||||
|
break;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
this.definitions[className].properties[key] = {type: Number};
|
this.definitions[className].properties[key] = {type: Number};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue