码迷,mamicode.com
首页 > Web开发 > 详细

thinkjs——两表联查

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

标签:pad   border   class   port   思考   model   分类   count   信息   

问题来源:

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

标签:pad   border   class   port   思考   model   分类   count   信息   

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

(1)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!