续集包含即使它为空
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 工具类