如何使用 sequelize 和 mysql 创建一对一的关系?
Posted
技术标签:
【中文标题】如何使用 sequelize 和 mysql 创建一对一的关系?【英文标题】:How to create a one-to-one relationship using sequelize and mysql? 【发布时间】:2019-02-11 09:52:44 【问题描述】:我正在尝试在两个实体之间创建一对一的关系。我使用sequelize
作为数据库mysql
的ORM。
我的模型定义如下:
var user = (sequelize, DataTypes) =>
const User = sequelize.define('user',
name: type: DataTypes.STRING, allowNull: false, unique: true
,
timestamps: false
);
return User;
;
var product = (sequelize, DataTypes) =>
const Product = sequelize.define('product',
title: type: DataTypes.STRING, allowNull: false, unique: true, default: 'Coop Default'
,
timestamps: false
);
return Product;
;
并通过以下代码行建立一对一的关系
db.product.belongsTo(db.user);
db.user.hasOne(db.product);
但是,这不会在表 products
中创建唯一的外键。
mysql> desc products;
+--------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | varchar(255) | NO | UNI | NULL | |
| userId | int(11) | YES | MUL | NULL | |
+--------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
我还应该在 ORM 中做些什么来确保 userId
是唯一的?
【问题讨论】:
请检查以下答案 - ***.com/questions/29551941/… 【参考方案1】:我可以通过在模型定义中提及它来强制对foreignKey 施加unique
约束,显然,sequelize 无法从关联中做到这一点。
var product = (sequelize, DataTypes) =>
const Product = sequelize.define('product',
title: type: DataTypes.STRING,
allowNull: false,
unique: true
,
userId: type: DataTypes.INTEGER,
allowNull: false,
unique: true
,
timestamps: false
);
return Product;
;
【讨论】:
以上是关于如何使用 sequelize 和 mysql 创建一对一的关系?的主要内容,如果未能解决你的问题,请参考以下文章
Node、Sequelize、Mysql - 如何为模型定义排序规则和字符集?
如何在 Sequelize 中使用 MySQL JSON 数据类型
如何在 mysql Sequelize 实例中拥有数组的数据类型?
如何在 MySql 中使用 sequelize 运行多个原始查询?