Node.js 使用';其中';和';包括';同时声明
我已经设法让include语句使用外键,但是当我尝试向findAll语句添加where语句时,我得到了以下错误。我已经检查了我的外键和型号无数次,我看不出它们有任何问题 以下API中的语法是否正确?密钥中的数据很重要,因此我不想在解决方法上花费更多时间。我见过其他例子,其中一个include键中有where语句,但我想要拉取的字段在主表上,所以我认为情况不同 未处理的拒绝错误:包括意外的拒绝。元素必须是模型、关联或对象 原料药 更新 错误消息Node.js 使用';其中';和';包括';同时声明,node.js,postgresql,sequelize.js,Node.js,Postgresql,Sequelize.js,我已经设法让include语句使用外键,但是当我尝试向findAll语句添加where语句时,我得到了以下错误。我已经检查了我的外键和型号无数次,我看不出它们有任何问题 以下API中的语法是否正确?密钥中的数据很重要,因此我不想在解决方法上花费更多时间。我见过其他例子,其中一个include键中有where语句,但我想要拉取的字段在主表上,所以我认为情况不同 未处理的拒绝错误:包括意外的拒绝。元素必须是模型、关联或对象 原料药 更新 错误消息 { "message":
{
"message": "missing FROM-clause entry for table \"diveLog\""
}
带有原始SQL的控制器API
exports.schoolDiveLogApproval = async (req, res) => {
try {
const schoolID = req.params.schoolID;
const { QueryTypes } = require('sequelize');
await diveLog.sequelize.query(
'SELECT * '+
'FROM "diveLogs" '+
'LEFT OUTER JOIN "diveTypes" AS "diveTypeID_FK2" ON "diveLogs"."diveTypeID" = "diveTypeID_FK2"."diveTypeID" ' +
'LEFT OUTER JOIN "diveSchools" AS "diveSchoolID_FK" ON "diveLog"."diveSchoolID" = "diveSchoolID_FK"."diveSchoolID" ' +
'LEFT OUTER JOIN "currents" AS "currentID_FK" ON "diveLog"."currentID" = "currentID_FK"."currentID" ' +
'LEFT OUTER JOIN "visibilities" AS "visibilityID_FK" ON "diveLog"."visibilityID" = "visibilityID_FK"."visibilityID" ' +
'LEFT OUTER JOIN "userLogins" AS "userID_FK" ON "diveLog"."userID" = "userID_FK1"."userID" ' +
'LEFT OUTER JOIN "diveSpots" AS "diveSpotID_FK2" ON "diveLog"."diveSpotID" = "diveSpotFK2"."diveSpotID" ' +
'WHERE "diveLogs"."diveSchoolID" = ? ' +
'AND "diveLogs"."diveVerifiedBySchool" = ?',
{
replacements: [schoolID, false],
type: QueryTypes.SELECT
}
)
根据pgAdmin数据库,所有的表名和列名看起来都是正确的,所以除了语法之外,我看不出问题出在哪里
我已经偏离了在IDE终端中执行SQL的方式,因此理论上应该执行SQL。这更可能与我传递id的方式有关吗?好吧,我真的尝试了几分钟来讨论这个续集,但我真的建议您学习和使用原始SQL,它的方式更简单、更通用 在尝试设置和理解这个sqlize的半个小时后,看到了这么多奇怪的问题,比如: 选择id等不存在的列,在表“user_infoS(?)的名称中添加一个“s”。。所以我放弃了,提出了一个可能对你有帮助的问题,如果我正确理解你的问题的话 如果你发送正确的模式,我可以帮助你进一步,但是的,对不起,我不能在这个续集花更多的时间,这件事是可怕的
const { QueryTypes } = require('sequelize');
await sequelize.query(
'SELECT *'+
'FROM diveLog l'+
'JOIN diveType t ON l.diveTypeId = t.id'+
'JOIN diveSchool s ON l.diveSchoolId = s.id'+
'JOIN current c ON l.currentId = c.id'+
'JOIN visibility v ON l.visibilityId = v.id'+
'JOIN user u ON l.userId = u.id'+
'JOIN diveSpot sp ON l.diveSpotId = sp.id'+
'WHERE diveSchoolID = ?'+
'AND diveVerifiedBySchool = ?',
{
replacements: [schoolID, false],
type: QueryTypes.SELECT
}
);
好吧,我真的试过几分钟来讨论这个续集,但我真的建议您学习和使用原始SQL,它的方式比这更简单、更通用 在尝试设置和理解这个sqlize的半个小时后,看到了这么多奇怪的问题,比如: 选择id等不存在的列,在表“user_infoS(?)的名称中添加一个“s”。。所以我放弃了,提出了一个可能对你有帮助的问题,如果我正确理解你的问题的话 如果你发送正确的模式,我可以帮助你进一步,但是的,对不起,我不能在这个续集花更多的时间,这件事是可怕的
const { QueryTypes } = require('sequelize');
await sequelize.query(
'SELECT *'+
'FROM diveLog l'+
'JOIN diveType t ON l.diveTypeId = t.id'+
'JOIN diveSchool s ON l.diveSchoolId = s.id'+
'JOIN current c ON l.currentId = c.id'+
'JOIN visibility v ON l.visibilityId = v.id'+
'JOIN user u ON l.userId = u.id'+
'JOIN diveSpot sp ON l.diveSpotId = sp.id'+
'WHERE diveSchoolID = ?'+
'AND diveVerifiedBySchool = ?',
{
replacements: [schoolID, false],
type: QueryTypes.SELECT
}
);
关于API中的第一个错误,请确保您需要以下模型:
const { diveLog, diveType, diveSchool, diveSchool, current, visibility, user, diveSpot } = require('../models');
第二条错误消息:
{
“消息”:“关系”divelogs“不存在”
}
指示在数据库中找不到表“divelogs”,请仔细检查该表是否存在,如果不存在,请运行迁移以创建该表。请注意,如果启用Sequelize,将自动使您的表名为复数。如果您定义了一个名为User的模型,Sequelize将创建一个表作为Users关于API中的第一个错误,请确保您需要如下所示的模型:
const { diveLog, diveType, diveSchool, diveSchool, current, visibility, user, diveSpot } = require('../models');
第二条错误消息:
{
“消息”:“关系”divelogs“不存在”
}
指示在数据库中找不到表“divelogs”,请仔细检查该表是否存在,如果不存在,请运行迁移以创建该表。请注意,如果启用Sequelize,将自动使您的表名为复数。如果您定义了一个名为User的模型,Sequelize将创建一个名为Users的表。第二个错误:您有时使用“devLogS”,有时使用“devLoG”(单数)在别名上输入错误
在这里询问之前,请尝试更多,我们不会为您完成工作。第二个错误:您有时使用“devLogS”,有时使用“devLoG”(单数形式)在别名上输入错误
在这里询问之前,请尝试更多,我们不会为您做任何工作。当我重新使用原始的Sequelize和include/where子句时,我从API中删除了[Op and],然后在文件顶部重新声明了每个模型,并且成功了
exports.schoolDiveLogApproval = async (req, res) => {
try {
const schoolID = req.params.schoolID;
diveLog.findAll({
include: [{
model: diveType, as: 'diveTypeID_FK2',
}, {
model: diveSchool, as: 'diveSchoolID_FK',
}, {
model: current, as: 'currentID_FK',
}, {
model: visibility, as: 'visibilityID_FK',
}, {
model: user, as: 'userID_FK1',
}, {
model: diveSpot, as: 'diveSpotID_FK2'
}],
where: [{
diveSchoolID: req.params.schoolID,
diveVerifiedBySchool: false
}],
})
.then((diveLog) => {
const schoolDiveLogList = [];
for (i = 0; i < diveLog.length; i++) {
exports.schoolDiveLogApproval=async(req,res)=>{
试一试{
const schoolID=req.params.schoolID;
迪维洛格·芬德尔({
包括:[{
型号:diveType,as:'diveTypeID_FK2',
}, {
型号:DevSchool,如:“DevSchool_FK”,
}, {
型号:current,as:'currentID_FK',
}, {
模型:可见性,如:“visibilityID_FK”,
}, {
型号:user,as:'userID_FK1',
}, {
型号:DevSpot,as:'DevSpotId_FK2'
}],
其中:[{
DevChoolid:req.params.schoolID,
按学校划分:false
}],
})
.然后((diveLog)=>{
const schoolDiveLogList=[];
对于(i=0;iexports.schoolDiveLogApproval = async (req, res) => {
try {
const schoolID = req.params.schoolID;
diveLog.findAll({
include: [{
model: diveType, as: 'diveTypeID_FK2',
}, {
model: diveSchool, as: 'diveSchoolID_FK',
}, {
model: current, as: 'currentID_FK',
}, {
model: visibility, as: 'visibilityID_FK',
}, {
model: user, as: 'userID_FK1',
}, {
model: diveSpot, as: 'diveSpotID_FK2'
}],
where: [{
diveSchoolID: req.params.schoolID,
diveVerifiedBySchool: false
}],
})
.then((diveLog) => {
const schoolDiveLogList = [];
for (i = 0; i < diveLog.length; i++) {
exports.schoolsidelogapproval=异步(req,res)=>{
试一试{
const schoolID=req.params.schoolID;
迪维洛格·芬德尔({
包括:[{
型号:diveType,as:'diveTypeID_FK2',
}, {
型号:DevSchool,如:“DevSchool_FK”,
}, {
型号:current,as:'currentID_FK',
}, {
模型:可见性,如:“visibilityID_FK”,
}, {
型号:user,as:'userID_FK1',
}, {
型号:DevSpot,as:'DevSpotId_FK2'
}],
其中:[{
DevChoolid:req.params.schoolID,
按学校划分:fals