我使用Sequelize express和Node.js作为后端,我的sequelize中的一些数据需要包含到另一个表中,但是其中一些数据是null,所以我得到的整个结果都是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时,结果应该返回。
答案 0 :(得分:14)
但是,相关模型上的
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"]});
});
答案 1 :(得分:0)
您可以添加属性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 }),
});