Javascript 顶层sequelize v5的where子句出错
我希望你能帮我找到解决这个问题的办法 基本上,这个查询所做的是从一个名为“jobs”的表中加载具有多个条件的元素。条件是根据相关市场、工作状态、关键字和订单进行加载 该代码段如下所示:Javascript 顶层sequelize v5的where子句出错,javascript,mysql,node.js,sequelize.js,Javascript,Mysql,Node.js,Sequelize.js,我希望你能帮我找到解决这个问题的办法 基本上,这个查询所做的是从一个名为“jobs”的表中加载具有多个条件的元素。条件是根据相关市场、工作状态、关键字和订单进行加载 该代码段如下所示: sequelize.models.jobs.findAll( { offset: ( filters.page * filters.size ) - filters.size, limit: filters.size, w
sequelize.models.jobs.findAll( {
offset: ( filters.page * filters.size ) - filters.size,
limit: filters.size,
where: [
{
status:"approved"
}
],
include: [
{
model: sequelize.models.users,
attributes: [
'id', 'firstName', 'lastName', 'phoneNumber', 'email', 'profilePicture'
],
required: false
}
]
} )
如果你注意到有一种叫做用户的关系,一切都很完美(就像我能说的魅力)。但当我尝试在查询的顶层执行一些where子句时,问题就出现了。例如,如果我将其添加到整个逻辑中断的位置:
{
status: "approved",
'$users.firstName$': "Put a name here"
}
Sequelize生成的查询:
SELECT `jobs`.*, `users`.`id` AS `users.id`, `users`.`firstName` AS `users.firstName`, `users`.`lastName` AS `users.lastName`, `users`.`phoneNumber` AS `users.phoneNumber`, `users`.`email` AS `users.email`, `users`.`profilePicture` AS `users.profilePicture`, `users->jobWorkers`.`workerId` AS `users.jobWorkers.workerId`, `users->jobWorkers`.`jobId` AS `users.jobWorkers.jobId`, `users->jobWorkers`.`hours` AS `users.jobWorkers.hours`, `users->jobWorkers`.`wage` AS `users.jobWorkers.wage`, `users->jobWorkers`.`bonus` AS `users.jobWorkers.bonus`, `users->jobWorkers`.`paid` AS `users.jobWorkers.paid`, `users->jobWorkers`.`createdAt` AS `users.jobWorkers.createdAt`, `users->jobWorkers`.`updatedAt` AS `users.jobWorkers.updatedAt`, `users->jobWorkers`.`deletedAt` AS `users.jobWorkers.deletedAt` FROM (SELECT `jobs`.`id`, `jobs`.`rate`, `jobs`.`discount`, `jobs`.`drivingFee`, `jobs`.`bonus`, `jobs`.`token`, `jobs`.`type`, `jobs`.`jobDateTime`, `jobs`.`jobStartTimestamp`, `jobs`.`laborjacks`, `jobs`.`hours`, `jobs`.`adminNotes`, `jobs`.`description`, `jobs`.`contactName`, `jobs`.`contactPhone`, `jobs`.`contactEmail`, `jobs`.`multipleLocations`, `jobs`.`startAddressStreet1`, `jobs`.`startAddressStreet2`, `jobs`.`startAddressStreet3`, `jobs`.`startAddressCity`, `jobs`.`startAddressState`, `jobs`.`startAddressZip`, `jobs`.`endAddressStreet1`, `jobs`.`endAddressStreet2`, `jobs`.`endAddressStreet3`, `jobs`.`endAddressCity`, `jobs`.`endAddressState`, `jobs`.`endAddressZip`, `jobs`.`specialInstructions`, `jobs`.`hearAboutUs`, `jobs`.`status`, `jobs`.`tip`, `jobs`.`typeOther`, `jobs`.`createdAt` FROM `jobs` AS `jobs` WHERE (`jobs`.`deletedAt` IS NULL AND (((`jobs`.`description` LIKE '%Daniel%' OR `jobs`.`contactName` LIKE '%Daniel%' OR `jobs`.`contactEmail` LIKE '%Daniel%' OR `jobs`.`startAddressCity` LIKE '%Daniel%' OR `jobs`.`startAddressState` LIKE '%Daniel%' OR `jobs`.`startAddressStreet1` LIKE '%Daniel%' OR `jobs`.`startAddressStreet2` LIKE '%Daniel%' OR `jobs`.`startAddressStreet3` LIKE '%Daniel%' OR `jobs`.`startAddressZip` LIKE '%Daniel%' OR `jobs`.`endAddressState` LIKE '%Daniel%' OR `jobs`.`endAddressStreet1` LIKE '%Daniel%' OR `jobs`.`endAddressStreet2` LIKE '%Daniel%' OR `jobs`.`endAddressStreet3` LIKE '%Daniel%' OR `jobs`.`endAddressZip` LIKE '%Daniel%' OR `jobs`.`specialInstructions` LIKE '%Daniel%' OR `jobs`.`adminNotes` LIKE '%Daniel%' OR `users`.`firstName` = 'Daniel') AND `jobs`.`status` = 'active'))) LIMIT 0, 10) AS `jobs` LEFT OUTER JOIN ( `jobWorkers` AS `users->jobWorkers` INNER JOIN `users` AS `users` ON `users`.`id` = `users->jobWorkers`.`workerId`) ON `jobs`.`id` = `users->jobWorkers`.`jobId` AND (`users`.`deletedAt` IS NULL)
续集错误:
“where子句”中的未知列“users.firstName”
如果可以看到sequelize,请将users.firstName添加到jobs中,而不是左外部联接。这是与名为JobWorkers的连接表的多对多关系,配置如下:
sequelize.models.jobs.belongtomany(sequelize.models.users,{通过:sequelize.models.jobWorkers,foreignKey:'jobId'})
sequelize.models.users.belongTomany(sequelize.models.jobs,{通过:sequelize.models.jobWorkers,foreignKey:'workerId'})
我不知道该怎么办。我需要在findAll函数中设置一个选项吗?表关系是错误的?我什么都试过了,但似乎都不管用
感谢您阅读所有这篇文章,如果有什么我没有解释的或者让我感到困惑,请告诉我。使用
左外联接
和中的一个条件,其中左外联接
中指示的表列上的
等于内联接
。那么,您实际想要实现什么呢?在findAll
@Emma中尝试subQuery:false
,我已经尝试了si查询:false,但使用了相同的方法result@Anatoly我想检查作业中的用户名是否等于我发送的关键字。因此,基本上,如果这个查询的子查询有相关数据,请将父查询带给我。你知道吗?你应该在where
中使用带有子查询的Sequelize.literal
来检查用户
,因为你使用了限制
和偏移
。