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——两表联查的主要内容,如果未能解决你的问题,请参考以下文章

thinkjs升级到3.0后的图片上传

两表联查 条件的问题

单的两表联查电影管理系统,下拉框回显

iwebshop两表联查

yii2.0AR两表联查

mybatis-plus两表联查带分页带模糊查询所有订单信息