我需要在 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 开始明确提供'

typescri枚举enum

sequelize抛出错误方言需要在express js中显式定义

sequelize.js - 你需要手动安装 mysql 包

nodejs + sequelize :: 在需要的地方包含 false