【问题标题】:Sequelize include even if it's null续集包含即使它为空
【发布时间】:2017-09-28 19:16:22
【问题描述】:

我正在使用带有 Node.js 作为后端的 Sequelize express,我需要将我的 sequelize 中的一些数据包含到另一个表中,但其中一些数据为空,所以我得到的整个结果为空。

问题:如果数据可用,我如何返回一些数据,如果没有数据,我如何返回另一个 null

router.get("/scheduled/:id", function(req, res, next) {

    models.Order.findOne({

        where: {
            id: req.params.id
        },
        attributes: ['orderStatus', 'id', 'serviceId', 'orderDescription', 'orderScheduledDate'],
        include: [{
            model: models.User,
            attributes: ['firstName', 'phoneNumber']
        }]
    }).then(function(data) {

        res.status(200).send({
            data: data,
            serviceName: data["serviceId"]
        });

    });

});

我想要:如果订单没有用户,结果应该返回null,当它为null时返回订单详细信息和用户。

【问题讨论】:

    标签: mysql node.js express orm sequelize.js


    【解决方案1】:

    可以添加属性required: false,

     const result = await company.findAndCountAll({
            where: conditions,
            distinct: true,
            include: [
              media,
              {
                model: tag,
                where: tagCond,
              },
              { model: users, where: userCond, attributes: ['id'] },
              {
                model: category_company,
                as: 'categoryCompany',
                where: categoryCond,
              },
              { model: media, as: 'logoInfo' },
              { model: city, as: 'city' },
              {
                model: employee,
                as: 'employees',
                required: false,
                include: [{
                  model: media,
                  as: 'avatarInfo',
                }],
                where: {
                  publish: {
                    [Op.ne]: -1,
                  },
                },
              },
            ],
            order: [['createdAt', 'DESC']],
            ...paginate({ currentPage: page, pageSize: limit }),
          });
    

    【讨论】:

      【解决方案2】:

      但是,相关模型上的 where 子句将创建 inner join 并仅返回具有匹配子模型的实例。要返回所有父实例,您应该添加required: false 以获取更多详细信息,请查看nested-eager-loading

      var users  = require('./database/models').user;
      
          models.Order.findOne({
          where: {
              id: req.params.id
          },attributes: ['orderStatus','id','serviceId','orderDescription','orderScheduledDate'],
          include: [
              {model: users,required: false,
              attributes: ['firstName','phoneNumber']
              }
          ]
      }).then(function(data) {
      
          res.status(200).send({data : data,serviceName : data["serviceId"]});
      
      });
      

      【讨论】:

      • 很多 thnx 兄弟,我刚刚删除了 where 现在我可以返回父数据,它已经是关系,所以不需要在哪里做。
      • 我的代码昨天运行得非常好,直到今天我的查询开始返回相当于 Sequelize 实例中的users: null,而我没有更改任何东西。我设置了required,它又开始工作了。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-26
      • 1970-01-01
      • 2021-07-24
      相关资源
      最近更新 更多