- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用sequelize v5
。我在 Coupon
和 ItemType
之间存在多对多
关系尽管CouponItemType
。
coupon.getItemTypes()
给出类型错误
TypeError: coupon.getItemTypes is not a function
const coupon = await Coupon.findOne({
where: {
id: couponId,
is_active: true
},
attributes: {
exclude: ["created_by", "updated_by", "created_on", "updated_on"]
}
})
const validForType = await coupon.getItemTypes({
where: {
item_type_id: 1
},
attributes: ["id"]
})
优惠券.js
Coupon.associate = function(models) {
// associations can be defined here
Coupon.belongsToMany(models.ItemType, {
through: 'CouponItemType',
as: 'coupon_type',
foreignKey: 'coupon_id',
otherKey: 'item_type_id'
})
};
ItemType.js
ItemType.associate = function(models) {
// associations can be defined here
ItemType.belongsToMany(models.Coupon, {
through: 'CouponItemType',
as: 'coupon_item_types',
foreignKey: 'item_type_id',
otherKey: 'coupon_id'
})
};
CouponItemType.js
'use strict';
module.exports = (sequelize, DataTypes) => {
const CouponItemType = sequelize.define('CouponItemType', {
coupon_id:DataTypes.BIGINT,
item_type_id:DataTypes.SMALLINT,
created_by: DataTypes.STRING,
updated_by: DataTypes.STRING,
created_on: DataTypes.DATE,
updated_on: DataTypes.DATE
}, {
tableName: 'coupon_item_types'
});
CouponItemType.associate = function(models) {
// associations can be defined here
};
return CouponItemType;
}
虽然它有很好的记录here
最佳答案
简短回答,因为您使用别名 (as
) 选项。语句为as: 'coupon_type'
,需要使用Coupon.getCoupon_type()
获取Coupon<的
.ItemType
/
很长的答案,这是一个有效的示例:
index.ts
:
import { sequelize } from '../../db';
import { Model, DataTypes } from 'sequelize';
class Coupon extends Model {}
Coupon.init(
{
coupon_id: {
unique: true,
type: DataTypes.BIGINT,
},
},
{ sequelize, modelName: 'Coupons' },
);
class ItemType extends Model {}
ItemType.init(
{
item_type_id: {
unique: true,
type: DataTypes.SMALLINT,
},
},
{ sequelize, modelName: 'ItemTypes' },
);
class CouponItemType extends Model {}
CouponItemType.init(
{
coupon_id: DataTypes.BIGINT,
item_type_id: DataTypes.SMALLINT,
created_by: DataTypes.STRING,
updated_by: DataTypes.STRING,
created_on: DataTypes.DATE,
updated_on: DataTypes.DATE,
},
{ sequelize, modelName: 'CouponItemType' },
);
Coupon.belongsToMany(ItemType, {
through: 'CouponItemType',
as: 'coupon_type',
foreignKey: 'coupon_id',
otherKey: 'item_type_id',
});
ItemType.belongsToMany(Coupon, {
through: 'CouponItemType',
as: 'coupon_item_types',
foreignKey: 'item_type_id',
otherKey: 'coupon_id',
});
(async function test() {
try {
await sequelize.sync({ force: true });
const couponDataRecords = [
{ coupon_id: 1, coupon_type: [{ item_type_id: 1 }, { item_type_id: 2 }] },
{ coupon_id: 2, coupon_type: [{ item_type_id: 4 }, { item_type_id: 3 }] },
];
await Coupon.bulkCreate(couponDataRecords, {
include: [
{
model: ItemType,
as: 'coupon_type',
},
],
});
const coupon = await Coupon.findOne({ where: { coupon_id: 1 } });
const validForType = await coupon.getCoupon_type({
where: {
item_type_id: 1,
},
attributes: ['id'],
raw: true,
});
console.log('validForType: ', validForType);
} catch (error) {
console.log(error);
} finally {
await sequelize.close();
}
})();
上述代码的执行结果:
validForType: [ { id: 1,
'CouponItemType.coupon_id': 1,
'CouponItemType.item_type_id': 1,
'CouponItemType.created_by': null,
'CouponItemType.updated_by': null,
'CouponItemType.created_on': null,
'CouponItemType.updated_on': null } ]
查看数据库中的数据记录:
node-sequelize-examples=# select * from "Coupons";
id | coupon_id
----+-----------
1 | 1
2 | 2
(2 rows)
node-sequelize-examples=# select * from "ItemTypes";
id | item_type_id
----+--------------
1 | 1
2 | 2
3 | 4
4 | 3
(4 rows)
node-sequelize-examples=# select * from "CouponItemType";
coupon_id | item_type_id | created_by | updated_by | created_on | updated_on
-----------+--------------+------------+------------+------------+------------
1 | 1 | | | |
1 | 2 | | | |
2 | 3 | | | |
2 | 4 | | | |
(4 rows)
db.ts
:
const sequelize = new Sequelize({
dialect: 'postgres',
host: envVars.POSTGRES_HOST,
username: envVars.POSTGRES_USER,
password: envVars.POSTGRES_PASSWORD,
database: envVars.POSTGRES_DB,
port: Number.parseInt(envVars.POSTGRES_PORT, 10),
define: {
freezeTableName: true,
timestamps: false,
},
});
Sequelize 版本:"sequelize": "^5.21.3"
源代码:https://github.com/mrdulin/node-sequelize-examples/tree/master/src/examples/stackoverflow/60449016
关于javascript - coupon.getItemTypes() 不是属于ToMany 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60449016/
我有两个模型“部门”和“ worker ”。部门与 worker 之间具有多对多关系。 worker 有名字字段。如何通过访问 departmet.workers 获取按名字排序的工作人员列表?有没有
我有一个使用核心数据的 iOS 应用程序。我创建了一个与另一个对象具有 toMany 关系的托管对象。该应用程序是用 RubyMotion 编写的。 当设置“组” NSManagedObject 对象
我是 greenDAO 的新手我正在编写 DaoGenerator。我遇到的一个问题是我有一个用户表和一个墙贴表。我希望能够在 wallpost 表中有两列与用户表(墙所有者和发帖用户)有 toMan
访问对象框 ToMany(无反向链接)关系的元素时,会在数据库中查询元素。是否有更快的方法只访问 id 而不查询其实体? 最佳答案 不,(目前)ToMany 不存在不是 ToOne 的 @Backli
我的模式中有一个 toMany 关系(“一个人有 1..N 只猫”)。如果我查询一个实体的 toMany-target 实体,我使用以下代码: List cats = human.getCatList
我目前正在使用 Path 的 greenDAO 分支,它可以对 greenDAO 生成的类、字段、方法等进行注释。 但是,当创建一个与另一个类具有 ToMany 关系的字段时,我似乎无法再对其进行注释
我对 greenDao 和 @ToMany 关系有疑问。当我插入数据库时,我可以很容易地获得@ToMany 关系。我的问题发生在我重新启动我的应用程序后,返回的列表是空的。 Daily.class
我正在关注 Tastypie 文档,但发现自己完全被困住了。我有以下内容: 应用程序接口(interface): class ProjectResource(ModelResource): m
我对 Hibernate 相当陌生,不完全理解应该如何继续更新中间表。 我在两个表之间有多对多关系: session 和出版物 POJO Publication.class: private List
我正在尝试为 to-many relation between Users and Articles 建模使用 GreenDAO,其中一个 User has many Articles . 引用: G
我只是想知道如何在数据库(1:toMany)中建立一个关系,但这次是在Java中。 我有一个JComboBox,我需要在其中插入NAME和一个ID(这个需要按自然顺序排序(较小到更高))。 在 JLi
这是我的模型: http://www.girardet.ch/model.png 我的目标是检索符合这些条件的所有报价单: 属于特定主题:Themes的name_en属性 按相关性排序 按作者过滤(使
我正在尝试使用 Sproutcore 呈现 UI,其中我有一个列表列表。有一个垂直的数据列表,其中每个关联的项目都有自己的项目列表。我已经根据我对 Sproutcore 的了解设置了我认为合适的模型。
我是一名优秀的程序员,十分优秀!