sequelize query得到重复结果
in 默认分类 with 0 comment

sequelize query得到重复结果

in 默认分类 with 0 comment

Sequelize是一个非常好用的ORM框架,当然也存在部分情况不方便的时候,需要我们自己写sql语句。
今天在使用过程中,发现一个问题,直接查询,查询结果重复了。
sql语句

select s.id,s.title,s.price,s.discount_price,s.primary_img,s.stock,s.online,c.num from spus s join carts c on c.spu_id = s.id AND c.uid = 1;

代码

 static async getDetail(uid) {
        const sql = `select s.id,s.title,s.price,s.discount_price,s.primary_img,s.stock,s.online,c.num from spus s join carts c on (c.spu_id = s.id and c.uid = ${uid});`;
        return await sequelize.query(sql);
    }

本地查询的结果

2    三色牛仔裤    1399    1299    http://127.0.0.1:4000/upload/1583248426524.png    20    1    
1    双色牛仔裤    1399    1299    http://i2.sleeve.7yue.pro/n11.png    20    1    6

利用sequelize查询的结果;

[
    [
        {
            "id": 2,
            "title": "三色牛仔裤",
            "price": 1399,
            "discount_price": 1299,
            "primary_img": "http://127.0.0.1:4000/upload/1583248426524.png",
            "stock": 20,
            "online": 1,
            "num": 2
        },
        {
            "id": 1,
            "title": "双色牛仔裤",
            "price": 1399,
            "discount_price": 1299,
            "primary_img": "http://i2.sleeve.7yue.pro/n11.png",
            "stock": 20,
            "online": 1,
            "num": 6
        }
        ],
        [
        {
            "id": 2,
            "title": "三色牛仔裤",
            "price": 1399,
            "discount_price": 1299,
            "primary_img": "http://127.0.0.1:4000/upload/1583248426524.png",
            "stock": 20,
            "online": 1,
            "num": 2
        },
        {
            "id": 1,
            "title": "双色牛仔裤",
            "price": 1399,
            "discount_price": 1299,
            "primary_img": "http://i2.sleeve.7yue.pro/n11.png",
            "stock": 20,
            "online": 1,
            "num": 6
        }
    ]
]

可以看到,相同的结果重复出现了。面向搜索引擎编程一波,找到了解决方法。
About sequelize.query get duplicate data #8307
给query加上第二个参数,即可解决。
修正后代码如下:

 static async getDetail(uid) {
        const sql = `select s.id,s.title,s.price,s.discount_price,s.primary_img,s.stock,s.online,c.num from spus s join carts c on (c.spu_id = s.id and c.uid = ${uid});`;
        return await sequelize.query(sql, { type: Sequelize.QueryTypes.SELECT });
    }

Just for fun!

Comments are closed.