SailsJS 唯一性范围多列
SailsJS uniqueness scope multiple columns
对于单个唯一性检查:
title: {
type: 'string',
required: true,
unique: true
}
dateTime: {
type: 'string',
required: true,
unique: true
}
有没有办法根据跨越 1 列以上的唯一性来限制模型 creation/update?假设现在我需要 table 通过使用字符串 + dateTime 来唯一。类似于 validates :title, uniqueness: { scope: :dateTime, :case_sensitive => false } in Rails.
您可以使用 afterValidate
添加您自己的跨越多个列的验证。
afterValidate: function (values, cb) {
Foo.findOne({
title: values.title,
dateTime: values.dateTime
}).exec(function(err, foo){
if(err) return cb(err);
if(foo) return cb('Not unique');
cb(null, values);
});
}
当我发现这个技巧可行时,我正在寻找这个问题的答案。
对于这个模型
title: {
type: 'string',
required: true,
}
dateTime: {
type: 'string',
required: true,
}
我们可以使用
Model.findOrCreate({title:"Your Title",dateTime:"DateTime"}).exec(console.log)
这里去掉了unique=true这两个属性。以下是问题中最初提出的使用 unique=true 的效果。
a) 不使用 unique=true 时
Data 1: title="Google", dateTime="2015-05-25T10:26:20.428Z" | will get accepeted
Data 2: title="Facebook", dateTime="2015-05-25T10:26:20.428Z" | will get accepeted
Data 3: title="Google", dateTime="2015-05-25T10:26:20.428Z" | will get rejected (because same as 1)
b) 当使用 unique=true
Data 1: title="Google", dateTime="2015-05-25T10:26:20.428Z" | will get accepeted
Data 2: title="Facebook", dateTime="2015-05-25T10:26:20.428Z" | will get rejected (because dateTime is same as 1)
Data 3: title="Facebook", dateTime="2016-06-26T10:26:20.428Z" | will get rejected (because title is same as 2)
对于单个唯一性检查:
title: {
type: 'string',
required: true,
unique: true
}
dateTime: {
type: 'string',
required: true,
unique: true
}
有没有办法根据跨越 1 列以上的唯一性来限制模型 creation/update?假设现在我需要 table 通过使用字符串 + dateTime 来唯一。类似于 validates :title, uniqueness: { scope: :dateTime, :case_sensitive => false } in Rails.
您可以使用 afterValidate
添加您自己的跨越多个列的验证。
afterValidate: function (values, cb) {
Foo.findOne({
title: values.title,
dateTime: values.dateTime
}).exec(function(err, foo){
if(err) return cb(err);
if(foo) return cb('Not unique');
cb(null, values);
});
}
当我发现这个技巧可行时,我正在寻找这个问题的答案。
对于这个模型
title: {
type: 'string',
required: true,
}
dateTime: {
type: 'string',
required: true,
}
我们可以使用
Model.findOrCreate({title:"Your Title",dateTime:"DateTime"}).exec(console.log)
这里去掉了unique=true这两个属性。以下是问题中最初提出的使用 unique=true 的效果。
a) 不使用 unique=true 时
Data 1: title="Google", dateTime="2015-05-25T10:26:20.428Z" | will get accepeted
Data 2: title="Facebook", dateTime="2015-05-25T10:26:20.428Z" | will get accepeted
Data 3: title="Google", dateTime="2015-05-25T10:26:20.428Z" | will get rejected (because same as 1)
b) 当使用 unique=true
Data 1: title="Google", dateTime="2015-05-25T10:26:20.428Z" | will get accepeted
Data 2: title="Facebook", dateTime="2015-05-25T10:26:20.428Z" | will get rejected (because dateTime is same as 1)
Data 3: title="Facebook", dateTime="2016-06-26T10:26:20.428Z" | will get rejected (because title is same as 2)