export default function (sequelize, DataTypes) {
const OrderAddress = sequelize.define('OrderAddress', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
},
is_default: {
type: DataTypes.BOOLEAN,
allowNull: true,
defaultValue: false,
},
receiver_name: {
type: DataTypes.STRING,
allowNull: true,
},
phone_number: {
type: DataTypes.STRING,
allowNull: true,
},
address: {
type: DataTypes.STRING,
allowNull: true,
},
address_detail: {
type: DataTypes.STRING,
allowNull: true,
},
postcode: {
type: DataTypes.STRING,
allowNull: true,
},
}
});
我的orderAddress
模型与上面类似,我想进行验证以仅允许将一项is_default
设置为true
。
所以
const address = {
is_default: true, // default one
}
const address2 = {
is_default: true // no you can't!
}
我应该为此模型创建is_default
字段unique: true
还是添加一些自定义validation
?
答案 0 :(得分:0)
可能有几种方法可以实现这一目标。
答案 1 :(得分:0)
您可以在order_id
(或任何关系字段)和is_defualt
(第一个示例)上添加唯一索引,也可以对其进行重构以设置{{1} },而不是在default_address
上进行设置(第二个示例)
第一个选项,添加唯一索引
Order
第二个选项,在订单级别检查
假设OrderAddress
属于indexes: [
{
fields: ['is_default', 'order_id'], // or whatever your relational field is
unique: true,
},
],
模型,您也可以在此处添加验证以提高效率。由于您想知道哪个地址是默认地址,并且只允许一个地址,因此添加一个名为OrderAddress
的字段,并将值设置为“ address”或“ address2”的枚举,以指示应使用哪个地址-自然只能设置一个,不能同时设置两个。
然后在Order
模型上,您可以添加一个Order.default_address
钩子,以检查设置为“默认”的字段是否包含Order
的ID。
beforeValidate