Я работаю над приложением для составления списков, где вы можете добавить шоу в список. Таблицы объединены отношением «многие ко многим»:
Показать ---> ListedShow <--- Список </p>
Я хочу получить последние 5 ListedShow
экземпляров в порядке убыванияпо их createdAt
отметке времени. Цель состоит в том, чтобы создать новостную ленту о последних действиях.
На мой взгляд, запрос секвелизации будет выглядеть так:
db.ListedShow.findAll({
limit: 5,
order: [
['created_at', 'DESC'],
],
include: [{
model: db.List,
attributes: ['user_id', 'list_name',],
},
{
model: db.Show,
attributes: ['show_id', 'show_title', 'show_img',],
},
],
})
... но это дает ошибку: SequelizeEagerLoadingError: List is not associated to ListedShow!
Я также пытался написать запрос через исходную таблицу, используя through
, следуя документации и некоторым другим рекомендациям SO:
db.List.findAll({
limit: 5,
attributes: ['list_id', 'user_id', 'list_name',],
include: [{
model: db.Show,
as: 'listedShow',
through: {
attributes: ['show_id', 'show_title', 'show_img',],
required: true,
},
},
{
model: db.LocalUser,
attributes: ['user_id', 'username', 'user_img', 'display_name',],
},
],
})
Это предоставляет некоторую необходимую информацию, но я не могуупорядочить по отметке времени ListedShow
createdAt
, поэтому я не могу ограничить свой запрос самой последней 5.
Я также рассмотрел возможность добавления ассоциаций в модель ListedShow
, но, похоже, это противоречит передовым методам. Итак, как мне запросить последние 5 ListedShow
s, используя Sequelize?