Sequelize - предложение Where с использованием включенного атрибута модели

Используя sequelize, мне нужно найти все статьи, удовлетворяющие следующему условию: article.isSecret = false OR article.board.managerId = user.userId OR article.authorId = user.userId. Ниже приведен код, который я написал:

const articles = await Articles.findAll({
    include: [{
        model: Boards, 
        as: 'board', 
        attributes: ['managerId'], 
        required: true, 
    }], 
    where: {
        [Op.or]: [{
            isSecret: false, 
        }, {
            'board.managerId': user.userId, 
        }, {
            authorId: user.userId, 
        }], 
    }, 
    attributes: ['id', 'title', 'authorId', 'createdAt'], 
});

Но код выдал ошибку Unknown column 'article.board.managerId' in 'on clause'. Как правильно загрузить значение родительской модели в предложение where? Я пробовал $board.managerId$ и $Boards.managerId$, но им обоим не удалось загрузить значение article.board.managerId.


person cylee    schedule 21.07.2020    source источник


Ответы (1)


Я наконец-то смог решить проблему, я бы написал здесь свое решение, чтобы помочь всем, кто сталкивается с той же проблемой. Поместите предложение where во включенную модель, в данном случае модель Boards.

const articles = await Articles.findAll({
    include: [{
        model: Boards, 
        as: 'board', 
        where: {
            [Op.or]: [{
                '$article.isSecret$': false, 
            }, {
                managerId: user.userId, 
            }, {
                '$article.authorId$': user.userId, 
            }], 
        }, 
        attributes: ['managerId'], 
        required: true, 
    }], 
    attributes: ['id', 'title', 'authorId', 'createdAt'], 
});
person cylee    schedule 21.07.2020