thinkjs——两表联查
Posted 郑叶叶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkjs——两表联查相关的知识,希望对你有一定的参考价值。
问题来源:
现有一张texture以及一张tradename表,两者的联系是texture表中有一字段名为tid对应tradename表中的id,而tradename表中却有一字段type,要求根据tradename表中的type值为texture表分类显示。
解决方案:
1.欠打的麻烦又慢的solution
刚拿到手时,脑中想的第一种解决方案就是在查出texture表中现有的数据后,再取所有的tid集合,用in在texture表中用in查询,得到tradename表中的所有信息,然后再继续各种操作……
直到写到最后,才意识到自己的这种写法越写越麻烦,进而才想到或许自己的思考方向跑偏了,于是再翻看thinkjs官网中的model的介绍时,才看见有一种比较简洁的方法。
2.官方提供solution
在thinkjs官网中model本身提供了一种多表联合查询的方法:join,而这种方法就类似于我们之前用过mysql的join,只是这次自己又踩坑了:
完整的:
/** * authon:xxx * create:2017-02-10 * update:2017-02-10 * desc:xxxx */ ‘use strict‘; /** * model */ export default class extends think.model.base { /** * 获取列表方法 * @param obj * @returns {*} */ getList(obj) { // let whereObj = {‘tradename.type‘: obj.type}; let whereObj = {‘type‘: obj.type}; if (obj.stid && obj.stid != -99) { whereObj[‘texture.stid‘] = obj.stid; } if (obj.tid && obj.tid != -99) { whereObj[‘texture.tid‘] = obj.tid; } if (obj.sid && obj.sid != -99) { whereObj[‘texture.sid‘] = obj.sid; } return this.join({ table: ‘tradename‘, join: ‘left‘, on: [‘tid‘, ‘id‘] }).where(whereObj).order(‘texture.id DESC‘).field("tradename.id as tnid,texture.*").page(obj.page, obj.rows).countSelect(); } }
以上是关于thinkjs——两表联查的主要内容,如果未能解决你的问题,请参考以下文章