[英]How to create a one-to-one relationship using sequelize and mysql?
我试图在两个实体之间建立一对一的关系。 我正在将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
是唯一的?
通过在模型定义中提到它,我可以对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;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.