From a000cc9f5f45a2a8d711a27c8ce59bf568ff44fa Mon Sep 17 00:00:00 2001 From: welefen Date: Wed, 2 Jul 2014 15:06:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8D=95=E5=85=83=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E5=92=8C=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/Lib/Core/Model.js | 62 +++++++++++------------- test/test/model.js | 108 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 135 insertions(+), 35 deletions(-) diff --git a/lib/Lib/Core/Model.js b/lib/Lib/Core/Model.js index 1ca3abd3..cb6f84cd 100644 --- a/lib/Lib/Core/Model.js +++ b/lib/Lib/Core/Model.js @@ -854,48 +854,42 @@ var Model = module.exports = Class(function(){ }); }, /** - * 获取一条记录的某个字段值 + * 获取某个字段下的记录 * @return {[type]} [description] */ - getField: function(field, sepa){ - field = field.trim(); + getField: function(field, one){ var self = this; - var multi = false; - var parseOptions; - return this.parseOptions({ - 'field': field - }).then(function(options){ - parseOptions = options; - if (field.indexOf(',') > -1) { - if (options.limit === undefined && isNumber(sepa)) { - options.limit = sepa; - } - multi = true; - }else{ - options.limit = isNumber(sepa) ? sepa : 1; + return this.parseOptions({'field': field}).then(function(options){ + if (isNumber(one)) { + options.limit = one; + }else if (one === true) { + options.limit = 1; } return self.db.select(options); }).then(function(data){ + var multi = field.indexOf(',') > -1; if (multi) { - var length = field.split(',').length; - field = Object.keys(data[0] || {}); - var key = field.shift(); - var key2 = field.shift(); - var cols = {}; - data.forEach(function(item){ - var name = item[key]; - if (length === 2) { - cols[name] = item[key2]; - }else{ - cols[name] = isString(sepa) ? item.join(sepa) : item; - } - }); - return cols; + var fields = field.split(/\s*,\s*/); + var result = {}; + fields.forEach(function(item){ + result[item] = []; + }) + data.every(function(item){ + fields.forEach(function(fItem){ + if (one === true) { + result[fItem] = item[fItem]; + }else{ + result[fItem].push(item[fItem]); + } + }) + return one === true ? false : true; + }) + return result; }else{ - if (sepa !== true && parseOptions.limit === 1) { - return data[0]; - } - return Object.values(data[0] || {})[0]; + data = data.map(function(item){ + return Object.values(item)[0]; + }) + return one === true ? data[0] : data; } }); }, diff --git a/test/test/model.js b/test/test/model.js index c50db769..84249059 100644 --- a/test/test/model.js +++ b/test/test/model.js @@ -12,7 +12,8 @@ beforeEach(function(){ var data = [{"Field":"id","Type":"int(11) unsigned","Null":"NO","Key":"PRI","Default":null,"Extra":"auto_increment"},{"Field":"title","Type":"varchar(255)","Null":"NO","Key":"UNI","Default":null,"Extra":""},{"Field":"cate_id","Type":"tinyint(255)","Null":"NO","Key":"MUL","Default":"1","Extra":""},{"Field":"cate_no","Type":"int(11)","Null":"YES","Key":"","Default":null,"Extra":""},{"Field":"md5","Type":"varchar(255)","Null":"NO","Key":"","Default":null,"Extra":""},{"Field":"width","Type":"int(11)","Null":"NO","Key":"","Default":"0","Extra":""},{"Field":"height","Type":"int(11)","Null":"NO","Key":"","Default":"0","Extra":""},{"Field":"pic_nums","Type":"int(11)","Null":"NO","Key":"MUL","Default":"0","Extra":""},{"Field":"view_nums","Type":"int(11)","Null":"NO","Key":"MUL","Default":"0","Extra":""},{"Field":"content","Type":"text","Null":"NO","Key":"","Default":null,"Extra":""},{"Field":"date","Type":"int(11)","Null":"NO","Key":"MUL","Default":null,"Extra":""},{"Field":"is_hide","Type":"tinyint(11)","Null":"YES","Key":"MUL","Default":"0","Extra":""},{"Field":"is_safe","Type":"tinyint(11)","Null":"YES","Key":"MUL","Default":"1","Extra":""}]; return getPromise(data); } - return getPromise([]); + var data = [{"id":7565,"title":"米兰达·可儿干练服装写真大片","cate_id":1,"cate_no":0,"md5":"27e562c50195153d89c52072bd4c8d5a","width":936,"height":1177,"pic_nums":11,"view_nums":1965,"content":"","date":20140526,"is_hide":0,"is_safe":0},{"id":7564,"title":"[Beautyleg]2014.05.21 No.977 Cindy","cate_id":2,"cate_no":977,"md5":"e31b3202f3cefe9944fb0e086064694f","width":1600,"height":2400,"pic_nums":30,"view_nums":1558,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7563,"title":"[DISI第四印象]2014.05.21 NO.281","cate_id":7,"cate_no":281,"md5":"ea455be2cab6813964543662b462a550","width":960,"height":640,"pic_nums":30,"view_nums":2335,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7562,"title":"[PANS写真]2014-05-20 NO.242 小倩 套图","cate_id":6,"cate_no":242,"md5":"de775e0785c379ad853b2a299e4736cd","width":1600,"height":2397,"pic_nums":30,"view_nums":2013,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7561,"title":"[ROSI写真]2014.05.20 NO.896","cate_id":3,"cate_no":896,"md5":"65e4a012a123190184a07d87c21e9dec","width":1600,"height":1067,"pic_nums":30,"view_nums":1425,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7560,"title":"[ROSI写真]2014.05.21 NO.897","cate_id":3,"cate_no":897,"md5":"51477ddac8a1d67d30f83da66e0b9ff5","width":1600,"height":1067,"pic_nums":22,"view_nums":1433,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7559,"title":"[ROSI写真]2014.05.22 NO.898","cate_id":3,"cate_no":898,"md5":"a74d4a187ae126b1446503da309b56c9","width":796,"height":531,"pic_nums":30,"view_nums":1994,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7558,"title":"[ru1mm写真] 2014-05-20 NO.151","cate_id":17,"cate_no":151,"md5":"4818e310b0c983e17ae87414a808879d","width":1200,"height":1800,"pic_nums":30,"view_nums":2035,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7557,"title":"[ru1mm写真] 2014-05-22 NO.152","cate_id":17,"cate_no":152,"md5":"af8b033373b1526bd8a28053f065359f","width":1600,"height":1067,"pic_nums":30,"view_nums":1118,"content":"","date":20140524,"is_hide":0,"is_safe":0}] + return getPromise(data); }) }); describe('Model', function(){ @@ -1618,6 +1619,111 @@ describe('Model', function(){ }) }) }) + describe('updateInc', function(){ + var model = D('Group'); + it('update view_nums', function(done){ + model.where({id: 10}).updateInc('view_nums').then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql); + assert.equal(sql, "UPDATE `meinv_group` SET `view_nums`=view_nums+1 WHERE ( `id` = 10 )"); + done(); + }) + }) + it('update view_nums + 10', function(done){ + model.where({id: 10}).updateInc('view_nums', 10).then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql); + assert.equal(sql, "UPDATE `meinv_group` SET `view_nums`=view_nums+10 WHERE ( `id` = 10 )"); + done(); + }) + }) + it('update view_nums + 10A', function(done){ + model.where({id: 10}).updateInc('view_nums', '10A').then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql); + assert.equal(sql, "UPDATE `meinv_group` SET `view_nums`=view_nums+10 WHERE ( `id` = 10 )"); + done(); + }) + }) + it('update view_nums + xxx', function(done){ + model.where({id: 10}).updateInc('view_nums', 'xxx').then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql); + assert.equal(sql, "UPDATE `meinv_group` SET `view_nums`=view_nums+1 WHERE ( `id` = 10 )"); + done(); + }) + }) + }) + + + describe('updateDec', function(){ + var model = D('Group'); + it('update view_nums', function(done){ + model.where({id: 10}).updateDec('view_nums').then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql); + assert.equal(sql, "UPDATE `meinv_group` SET `view_nums`=view_nums-1 WHERE ( `id` = 10 )"); + done(); + }) + }) + it('update view_nums - 10', function(done){ + model.where({id: 10}).updateDec('view_nums', 10).then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql); + assert.equal(sql, "UPDATE `meinv_group` SET `view_nums`=view_nums-10 WHERE ( `id` = 10 )"); + done(); + }) + }) + it('update view_nums - 10A', function(done){ + model.where({id: 10}).updateDec('view_nums', '10A').then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql); + assert.equal(sql, "UPDATE `meinv_group` SET `view_nums`=view_nums-10 WHERE ( `id` = 10 )"); + done(); + }) + }) + it('update view_nums - xxx', function(done){ + model.where({id: 10}).updateDec('view_nums', 'xxx').then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql); + assert.equal(sql, "UPDATE `meinv_group` SET `view_nums`=view_nums-1 WHERE ( `id` = 10 )"); + done(); + }) + }) + }) + + describe('getField', function(){ + var model = D('Group'); + it('get id field', function(done){ + model.getField('id').then(function(data){ + assert.equal(JSON.stringify(data), '[7565,7564,7563,7562,7561,7560,7559,7558,7557]') + done(); + }) + }) + it('get id field limit 5', function(done){ + model.getField('id', 5).then(function(data){ + var sql = model.getLastSql().trim(); + assert.equal(sql, 'SELECT `id` FROM `meinv_group` LIMIT 5') + done(); + }) + }) + it('get id field by one', function(done){ + model.getField('id', true).then(function(data){ + var sql = model.getLastSql().trim(); + assert.equal(data, 7565); + assert.equal(sql, 'SELECT `id` FROM `meinv_group` LIMIT 1') + done(); + }) + }) + it('get multi field', function(done){ + model.getField('id,view_nums').then(function(data){ + var sql = model.getLastSql().trim(); + assert.equal(JSON.stringify(data), '{"id":[7565,7564,7563,7562,7561,7560,7559,7558,7557],"view_nums":[1965,1558,2335,2013,1425,1433,1994,2035,1118]}'); + assert.equal(sql, 'SELECT `id`,`view_nums` FROM `meinv_group`') + done(); + }) + }) + })