续集包含即使它为空

Posted

技术标签:

【中文标题】续集包含即使它为空【英文标题】: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时返回订单详细信息和用户。

【问题讨论】:

【参考方案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,它又开始工作了。谢谢!

以上是关于续集包含即使它为空的主要内容,如果未能解决你的问题,请参考以下文章

判断字符串为空为 null 为 whitespace 工具类

linux字符测试

如果它为空或为空,如何从序列化中忽略可为空的属性?

即使停用词列表为空,如果包含停用词,全文搜索也不起作用

无法解构“对象(...)(...)”的属性“currentUser”,因为它为空

如果它为空,我如何从我的 JSON 中删除一个密钥