Я пытаюсь создать ВНУТРЕННЕЕ СОЕДИНЕНИЕ из Places
и Rate
, но я хочу установить "пользовательское" предложение ON.Связь между ними существует.
Place
модель имеет атрибут @ForeignKey(() => Rate)
выше атрибута "rate_code", а модель Rate
имеет атрибут @ForeignKey(() => Place)
выше атрибута "rate_code" (этот атрибут индексируется и НЕТТаблица PK) Кроме того, всякий раз, когда я делаю Place.findAll, включая Rate , Sequelize генерирует запрос, подобный SELECT ... FROM Place INNER JOIN Rate ON Place.id = Rate.rate_code
Обе модели включают PK, который не показан в модели, ноавтоматически генерируется,
модель / Place.ts
@Table
export class Place extends BaseModel<Place> {
@Column({
type: DataType.STRING,
allowNull: true,
defaultValue: null
})
name: string;
@ForeignKey(() => Rate)
@Column
rate_code: string;
@HasMany(() => Rate)
rate: Rate[];
}
модель / Rate.ts
@Table
export class Rate extends BaseModel<Rate> {
@Column({
type: DataType.STRING,
allowNull: true,
defaultValue: null
})
name: string;
@ForeignKey(() => Place)
@Column({
type: DataType.STRING(10),
allowNull: true,
defaultValue: null
})
rate_code: string;
}
ЭтоВот как я генерирую свой запрос Sequelize: Service.ts
Place.findAll({
attributes: ['name', 'rate_code'],
include: [
{
model: Rate,
required: true,
attributes: ['name', 'rate_code'],
}
]
})
Ожидание:
SELECT
Place.name,
Place.rate_code,
Rate.name,
Rate.rate_code
FROM Place
INNER JOIN Rate ON Place.rate_code = Rate.rate_code;
Реальность:
SELECT
Place.name,
Place.rate_code,
Rate.name,
Rate.rate_code
FROM Place
INNER JOIN Rate ON Place.id = Rate.rate_code;