sequelize — порядок по столбцу из включенной модели

#sequelize.js #sql-order-by

#sequelize.js #sql-порядок по

Вопрос:

Я не могу понять, как упорядочить по столбцу, который находится в моей включенной модели. Но я даже не возвращаю это поле в атрибутах. Я просто хочу заказать по нему, если это возможно. Или я могу вернуть его и не использовать, пока я могу сортировать по нему.

 const users = await db.User.findAll({
    raw: true,
    attributes: [
        'id',
        'first_name',
        'last_name',
        'email',
        'Permission.type'
    ],
    include: [
    {
        model: db.Permission,
        where: { id: { [Op.lte]: 2 } },
        attributes: [],
        order: [[{ model: db.Permission }, 'id', 'DESC']]
    }
    ]
});
 

В include блоке order блок сейчас ничего не делает. Но у меня есть атрибут в моей модели разрешений id , по которому я хочу упорядочить все результаты. Я согласен с добавлением Permission.id к моему attributes , если это необходимо. Но я попробовал, и это все равно не сработало.

Ответ №1:

Просто переместите order опцию из include основных параметров:

 const users = await db.User.findAll({
    raw: true,
    attributes: [
        'id',
        'first_name',
        'last_name',
        'email',
        'Permission.type'
    ],
    include: [
    {
        model: db.Permission,
        where: { id: { [Op.lte]: 2 } },
        attributes: []
    }
    ],
    order: [[{ model: db.Permission }, 'id', 'DESC']]
});
 

Также, возможно, вам следует указать id в include атрибутах.

Комментарии:

1. Хорошо, это сработало! Я не мог заставить его работать раньше, но я менял несколько вещей одновременно. Мне также пришлось вернуть идентификатор в основных атрибутах. Если бы я попытался вернуть его в атрибуты включения, он сломался, и я не получил никаких результатов.

2. Пожалуйста, никогда не пытайтесь изменить несколько вещей одновременно. Таким образом, вы не можете сказать, что именно вызвало проблему.