【问题标题】:How to get all records if nested records do not exist in Sequelize如果 Sequelize 中不存在嵌套记录,如何获取所有记录
【发布时间】:2021-08-02 13:17:50
【问题描述】:

如果 Sequelize 上不存在子项,我想获取所有父记录,例如下面的代码获取所有带有嵌套记录的记录

const posts = await Post.findAll({
    order: [
        ['createdAt', 'DESC']
    ],
    include: [{
        model: db.replies, as: 'replies',
        createdAt: 'DESC'
    }]
})

上述代码从Post获取所有数据,无论replies是否存在,但出于某种原因,我想获取所有posts,其中没有任何replies,这意味着不存在子记录.

请问我怎样才能做到这一点?

谢谢

【问题讨论】:

    标签: javascript node.js postgresql sequelize.js


    【解决方案1】:

    您可以使用如下语法从父模型的“where”对象引用嵌套模型的列:“$AssociatedTableName.columnName$”

    尝试添加:

    where: {
              '$replies.id$': null 
            },
    

    required: false

    结果将是:

    const posts = await Post.findAll({
     where: {
              '$replies.id$': null 
            },
        order: [
            ['createdAt', 'DESC']
        ],
        include: [{
            model: db.replies, as: 'replies',
            createdAt: 'DESC',
            required: false
        }]
    })
    

    【讨论】:

      【解决方案2】:

      你可以使用文字方法创建

      来自 sequelize.literal,是原始 SQL。即

      考虑 Order 和 OrderDetail 是 order_detail 表。

      在这种情况下,您排除了所有没有详细信息的订单。

      const orders = await Order.findAll({
           where: {
              ...where,
              [Op.all]: literal(
                 "0 = (SELECT COUNT(*) FROM order_detail WHERE id_order `Order`.`id_order`)"
              ),
           },
           attributes: [...listOfAttibutes ], 
           include: []
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-21
        • 2020-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多