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)
关系应该如下
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)