首页 > 代码库 > thinkjs——两表联查

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——两表联查