我需要在 sequelize + typescript 中关联表
Posted
技术标签:
【中文标题】我需要在 sequelize + typescript 中关联表【英文标题】:I need associate tables in sequelize + typescript 【发布时间】:2022-01-20 01:00:08 【问题描述】:我需要将表与 sequelezie + typescript 关联,但我收到此错误:无法添加外键约束。引用表“veicles”中缺少约束“sales_ibfk_1”的索引,我将离开存储库链接以便于理解。
https://github.com/paulozy/auto-luby
import Model, DataTypes from 'sequelize'
import db from '../database'
import UserModel from './UserModel'
import VeicleModel from './VeicleModel'
interface ISaleModel extends Model
saleID: number
userID: number
veicleID: number
saleValue: number
veicleStatus: 'SOLD' | 'AVAILABLE' | 'RESERVED'
createdAt: Date
export const SaleModel = db.define<ISaleModel>('sale',
saleID:
type: DataTypes.INTEGER,
autoIncrement: true,
allowNull: false,
primaryKey: true
,
priceSold:
type: DataTypes.DECIMAL,
allowNull: false
,
soldAt:
type: DataTypes.DATE,
allowNull: false
)
SaleModel.belongsTo(VeicleModel, foreignKey: 'veicleID' )
SaleModel.belongsTo(UserModel, foreignKey: 'userID' )
import Model, DataTypes from "sequelize"
import db from "../database"
import SaleModel from "./SaleModel"
import ReserveModel from "./ReserveModel"
interface IVeicleModel extends Model
VeicleID: number
brand: string
model: string
yearFabrication: number
kmRotate: number
chassi: string
color: string
status: 'SOLD' | 'AVAILABLE' | 'RESERVED'
export const VeicleModel = db.define<IVeicleModel>('veicle',
veicleID:
type: DataTypes.INTEGER,
autoIncrement: true,
allowNull: false,
primaryKey: true
,
brand:
type: DataTypes.STRING(20),
allowNull: false
,
model:
type: DataTypes.STRING(25),
allowNull: false
,
yearFabrication:
type: DataTypes.INTEGER,
allowNull: false
,
kmRotate:
type: DataTypes.DECIMAL,
allowNull: false
,
chassi:
type: DataTypes.STRING(30),
allowNull: false
,
color: DataTypes.STRING(10),
status: DataTypes.STRING(20),
price: DataTypes.DECIMAL,
createdAt: DataTypes.DATE
)
VeicleModel.hasMany(SaleModel)
VeicleModel.hasMany(ReserveModel)
请帮帮我
【问题讨论】:
你能解释一下你在什么情况下得到错误?什么时候?调查会更容易。 似乎所有模型都缺少默认的id
字段。您需要为 VeicleModel 定义 id
字段,该字段将与外键 veicleID
关联。
@hotcakedev 我在 VeicleModel 和你的迁移中有这个字段,我还需要在 SaleModel 中添加这个字段吗?
@dina 我有四个表,用户、车辆、销售和储备。表销售和储备收到其他表的外键(veicleID 和用户 ID),但是当我运行迁移时,我收到此错误
@paulo-abreu 最好给每张表加上id。
【参考方案1】:
阿布鲁,
我在本地试用了您的仓库。这是我的分支。我假设您使用 mysql 作为您的应用程序数据库。我已经使用 docker-compose 文件在本地添加了它,并在本地测试了你的 repo。这对我来说似乎工作得很好。我会在这里分享一些截图。
如果你想在 docker 环境中测试它,我添加了一个 PR。
【讨论】:
以上是关于我需要在 sequelize + typescript 中关联表的主要内容,如果未能解决你的问题,请参考以下文章
我需要在 sequelize + typescript 中关联表
Sequelize '方言需要从 v4.0.0 开始明确提供'
sequelize抛出错误方言需要在express js中显式定义