如何使用 node.js 在 sequelize 中控制内连接查询?

Ebr*_*mer 4 join inner-join node.js sequelize.js

天数模型:

workoutId: {
    type: Sequelize.INTEGER,
},
traineeId: {
  type: Sequelize.INTEGER,
  primaryKey: true
},
dayNumber: {
  type: Sequelize.INTEGER,
  primaryKey: true
},
status: {
  type: Sequelize.INTEGER
},
Run Code Online (Sandbox Code Playgroud)

锻炼模型:

workout_id: {
  type: Sequelize.INTEGER,
  primaryKey: true
},
exercise_name: {
  type: Sequelize.INTEGER,
  primaryKey: true
},
coach_id: {
  type: Sequelize.INTEGER,
  primaryKey: true
}
Run Code Online (Sandbox Code Playgroud)

我只想在两个表之间进行内部连接以返回每天的所有练习,我使用以下内容

const Days = require('../models/days');
const WorkoutsExercises = require('../models/workoutsExercises');

Days.findAll({
  include: [{
    model: WorkoutsExercises,
      required: true
   }]        
})
Run Code Online (Sandbox Code Playgroud)

此函数返回以下查询:

SELECT
  `day`.`workoutId`,
  `day`.`dayNumber`,
  `day`.`status`,
  `day`.`traineeId`,
  
  `workoutsExercises`.`workout_id` AS `workoutsExercises.workout_id`, 
  `workoutsExercises`.`exercise_name` AS `workoutsExercises.exercise_name`, 
  `workoutsExercises`.`coach_id` AS `workoutsExercises.coach_id`

FROM `days` AS `day`

INNER JOIN `workoutsExercises` AS `workoutsExercises` 

ON `day`.`dayNumber` = `workoutsExercises`.`workout_id`; 
Run Code Online (Sandbox Code Playgroud)

如何将 on 条件从 ( day. dayNumber) 更改为 ( day. workoutId)

Ebr*_*mer 6

关系应该如下

WorkoutExercises.hasMany(Day, {foreignKey: 'workout_id'})
Day.belongsTo(WorkoutExercises, {foreignKey: 'workout_id', targetKey: 'workout_id'})
Run Code Online (Sandbox Code Playgroud)

目标键是更改 ON 子句的内容,我们将使用相同的查询:

Days.findAll({
  include: [{
    model: WorkoutsExercises,
    required: true
  }]        
})
Run Code Online (Sandbox Code Playgroud)

这使:

SELECT

  `day`.`dayNumber`,
  `day`.`dayDate`,
  `day`.`status`,
  `day`.`traineeId`, 
  `day`.`workoutId`, 

  `workoutsExercises`.`exercise_name` AS `workoutsExercises.exercise_name`,
  `workoutsExercises`.`workout_id` AS `workoutsExercises.workout_id`,
  `workoutsExercises`.`coach_id` AS `workoutsExercises.coach_id`
 
 FROM `days` AS `day`
 
 INNER JOIN `workoutsExercises` AS `workoutsExercises`
 
 ON `day`.`workout_id` = `workoutsExercises`.`workout_id`;
Run Code Online (Sandbox Code Playgroud)