sequelize联表查询如何通过JSON列某个属性排序?

发布于 2022-09-12 01:19:36 字数 1492 浏览 17 评论 0

应该怎么样通过Task表time进行排序, 下面的查询应该怎么写?

const { Sequelize, Model, DataTypes } = require('sequelize');
const sequelize = new Sequelize({
  dialect: 'mysql', // support: mysql, mariadb, postgres, mssql
  database: 'test',
  host: 'localhost',
     port: 3306,
  username: 'username',
  password: 'password',
  sync: { alter: true }
});

class Task extends Model {}
Task.init({
    title: Sequelize.STRING,
    data: Sequelize.JSON,
    uid: {
      type:Sequelize.STRING,
      primaryKey: true,
    }
  }, { sequelize, modelName: 'task_test' }
);
class User extends Model {}
User.init({
    username: Sequelize.STRING,
    uid: {
      type:Sequelize.STRING,
      primaryKey: true,
    }
  }, { sequelize, modelName: 'user_test' }
);

Task.sync({ alter: true })
User.sync({ alter: true })


User.hasMany(Task,{ foreignKey: 'uid', targetKey: 'uid' }); // 将uid添加到Task模型
Task.belongsTo(User, { foreignKey: 'uid', targetKey: 'uid' }); // 同样会将uid添加到Task模型中

// 假设Task的数据结构是
// {
//   title: 'test',
//   uid: '1'
//   data: { time: '1583265819366' }
// }

// 创建测试数据
 User.create({ username: 'jack', uid: '1'})
 User.create({ username: 'rose', uid: '2'})
 Task.create({ title: 'a', uid: '2', data: { time: '1583265819366' }})
 Task.create({ title: 'b',uid: '1', data: { time: '1583265819399' }})

// 应该怎么样通过Task表time进行排序, 下面的查询应该怎么写?
User.findAll({
  where: {
  },
  include: [Task],
  order: []
}).then((items) => {
  console.log(items)
})


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文