对关联属性和根属性进行查询或后集



我正在尝试执行一个查询,其中 OR 语句同时引用根表属性和关联的表属性。我尝试了以下失败的方法,因为SQL无法访问整个查询范围内的别名:

const group = await SocialGroup.findOne({
    attributes: ['id'],
    where: {
        id: {
            [Op.eq]: id,
        },
        [Op.or]: [
            {
                adminId: {
                    [Op.eq]: ctx.socialUser.id,
                },
            },
            {
                ['$roles.userId$']: {
                    [Op.eq]: ctx.socialUser.id,
                },
            },
        ],
    },
    include: [
        {
            model: models.SocialGroupRight,
            as: 'roles',
            required: false,
        },
    ],
});

错误消息是 Unknown column 'roles.userId' in 'where clause 。它确实会生成查询。

我使用续集 4.x 最新

看起来像 findOne(( 方法中的一个错误。 使用 findAll(( 测试类似的查询给出了这个 SQL,它工作正常:

SELECT ... FROM sg LEFT OUTER JOIN sgr ON sg.id = sgr.sg_id WHERE (sg.id = 1 OR sgr.name = 'hello');

但是更改为 findOne(( 给出了这个无效的 SQL:

SELECT ... FROM ( SELECT ... FROM sg WHERE (sg.id = 1 OR sgr.name = 'hello') LIMIT 1 ) AS xxx LEFT OUTER JOIN sgr ON sg.id = sgr.sg_id;

WHERE 子句和 LIMIT 关键字在连接之前应用,这会破坏查询。 FWIW,使用 findAll(( 和 limit: 1 做了同样的事情。

对不起,我没有更有用的答案....

最新更新