Упорядочить запрос, принадлежащий многим, не включая дочерние атрибуты

Я новичок в продолжении и пытаюсь определить, как выполнить запрос для отношения «принадлежность ко многим», где мне нужно проверить наличие дочернего отношения, но я не хочу вводить ни одно из его полей.

  Project.belongsToMany(models.User, {
        through: 'userproject', as: 'links', foreignKey: 'project_id', otherKey: 'user_id'
    });

Моя попытка:

  const linkedProjects = this.model.findAll({
        attributes: ['Project.*'],
        include: [{
            model: models.User,
            as: 'links',
            where: {
                userid: user.sub
            }
        }]
    });

Однако этот стиль по-прежнему приносит мне данные прогнозируемых ссылок, которые для меня бесполезны, за исключением той части, где.

Как лучше всего это сделать без «сырого запроса»? Я ищу, в основном:

select p.* from project p 
inner join userproject up on p.project_id = up.project_id 
inner join user u on up.user_id = u.id
where u.userid = 'xxx'

person Luiz Henrique Martins Lins Rol    schedule 07.04.2018    source источник
comment
Вы пытались добавить attributes: [] внутрь объекта в массиве include?   -  person chettyharish    schedule 08.04.2018
comment
Это работает. Хочешь поставить это как ответ, чтобы я мог его принять? Спасибо   -  person Luiz Henrique Martins Lins Rol    schedule 09.04.2018
comment
Я просто добавил это как ответ :)   -  person chettyharish    schedule 10.04.2018


Ответы (2)


Повторная итерация для отметки его как решения.

Решение состоит в том, чтобы добавить attributes: [], чтобы не получать столбцы в операции продолжения. Поле атрибутов представляет собой массив, содержащий имена столбцов, которые необходимо получить при выполнении операции продолжения.

  const linkedProjects = this.model.findAll({
        attributes: ['Project.*'],
        include: [{
            model: models.User,
            as: 'links',
            attributes: [],
            where: {
                userid: user.sub
            }
        }]
    });
person chettyharish    schedule 09.04.2018

Вместо этого:

attributes: ['Project.*'], // this will load only fields from project table

Использовать

this.model.findAll({
    attributes: ['id','title',...], // all the attributes from project table
    include: [{
        model: models.User,
        attributes: ['id','project_id' ,], // all the attributes from user table
        as: 'links',
        where: {
            userid: user.sub
        }
    }]
});

//OR 

// remove attributes from all
this.model.findAll({
    include: [{
        model: models.User,
        as: 'links',
        where: {
            userid: user.sub
        }
    }]
});
person Vivek Doshi    schedule 09.04.2018