首页 > Web开发 > 详细

thinkjs——两表联查

时间:2017-02-13 20:09:13      阅读:261      评论:0      收藏:0      [点我收藏+]

问题来源:

现有一张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——两表联查

原文:http://www.cnblogs.com/zhengyeye/p/6395019.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!