使索引在环回中对模型唯一
Make index unique of a model in loopback
这是我的模型的样子
"name": "mClass",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"mClassName": {
"type": "string",
"required": true,
"index": {
"unique": true
}
},
"mClassUrl": {
"type": "string"
},
"mCreatedBy": {
"type": "string",
"required": true
},
"mCreatedAt": {
"type": "date",
"required": true,
"default": "$now"
},
"mUpdatedAt": {
"type": "date"
},
"mDeletedAt": {
"type": "date"
}
},
"validations": [],
"relations": {},
"acls": [
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$unauthenticated",
"permission": "DENY"
}
],
"methods": {}
}
我想让 class 名称独一无二。我尝试了 index:{unique:true} 但它似乎不起作用,因为我仍然可以创建具有相同名称的 classes。请帮助我进行哪些更改。
来自docs:
id No Boolean Whether the property is a unique identifier. Default is false. See Id property below.
所以我假设您必须使用 id: true 而不是 index: {...}。
您需要做的是在 model.json:
中定义索引
"indexes": {
"indexName": {
"keys": {
"mClassName": 1
},
"options": {
"unique": true
}
}
}
然后你需要在服务器启动时运行在你的数据源上自动更新,最好的地方是启动脚本,例如。 ./server/boot/db-autoupdate.js
:
'use strict';
module.exports = async function(app) {
// this will trigger the database structure update, like creating indexes (which is not handled by auto-migrate module
await app.dataSources.db.autoupdate();
};
或者,在您的 mClass.js 中,您可以执行以下操作:
module.exports = function (mClass) {
mClass.validatesUniquenessOf('mClassName');
};
以防有人正在寻找解决此问题的 Loopback v4 解决方案。在 Loopback v4 中,您将 @属性 注释修改为 "index: {unqiue: true}":
@model()
export class Client extends Entity {
@property({
type: 'string',
required: true,
index: {
unique: true,
},
})
name: string;
}
那么您必须更新架构:
npm run migrate
或重新创建它:
npm run migrate -- --rebuild
PostgresQL 是支持的,MySQL,我猜也是
这是我的模型的样子
"name": "mClass",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"mClassName": {
"type": "string",
"required": true,
"index": {
"unique": true
}
},
"mClassUrl": {
"type": "string"
},
"mCreatedBy": {
"type": "string",
"required": true
},
"mCreatedAt": {
"type": "date",
"required": true,
"default": "$now"
},
"mUpdatedAt": {
"type": "date"
},
"mDeletedAt": {
"type": "date"
}
},
"validations": [],
"relations": {},
"acls": [
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$unauthenticated",
"permission": "DENY"
}
],
"methods": {}
}
我想让 class 名称独一无二。我尝试了 index:{unique:true} 但它似乎不起作用,因为我仍然可以创建具有相同名称的 classes。请帮助我进行哪些更改。
来自docs:
id No Boolean Whether the property is a unique identifier. Default is false. See Id property below.
所以我假设您必须使用 id: true 而不是 index: {...}。
您需要做的是在 model.json:
中定义索引"indexes": {
"indexName": {
"keys": {
"mClassName": 1
},
"options": {
"unique": true
}
}
}
然后你需要在服务器启动时运行在你的数据源上自动更新,最好的地方是启动脚本,例如。 ./server/boot/db-autoupdate.js
:
'use strict';
module.exports = async function(app) {
// this will trigger the database structure update, like creating indexes (which is not handled by auto-migrate module
await app.dataSources.db.autoupdate();
};
或者,在您的 mClass.js 中,您可以执行以下操作:
module.exports = function (mClass) {
mClass.validatesUniquenessOf('mClassName');
};
以防有人正在寻找解决此问题的 Loopback v4 解决方案。在 Loopback v4 中,您将 @属性 注释修改为 "index: {unqiue: true}":
@model()
export class Client extends Entity {
@property({
type: 'string',
required: true,
index: {
unique: true,
},
})
name: string;
}
那么您必须更新架构:
npm run migrate
或重新创建它:
npm run migrate -- --rebuild
PostgresQL 是支持的,MySQL,我猜也是