我有两个型号
国家/地区 - 来自mysql服务器
Country = {
tableName: 'countries',
connection: 'someMysqlServer',
schema: true,
migrate: 'safe',
autoCreatedAt: false,
autoUpdatedAt: false,
attributes: {
country_id: {
type: 'integer',
primaryKey: true,
autoIncrement: true
},
....
}
};
User = {
connection: 'somePostgresqlServer',
attributes: {
id: {
type: 'integer',
primaryKey: true,
autoIncrement: true
},
country_id: {
model: 'country'
},
$> User.findOneById(1).populate( 'COUNTRY_ID')。EXEC(执行console.log)
并收到错误
sails> Error (E_UNKNOWN) :: Encountered an unexpected error
: Unable to determine primary key for collection `countries` because an error was encountered acquiring the collection definition:
[TypeError: Cannot read property 'definition' of undefined]
at _getPK (/projects/foturist-server/node_modules/sails-postgresql/lib/adapter.js:923:13)
at StrategyPlanner.__FIND__.Cursor.$getPK (/projects/foturist-server/node_modules/sails-postgresql/lib/adapter.js:504:20)
.....
Details: Error: Unable to determine primary key for collection `countries` because an error was encountered acquiring the collection definition:
[TypeError: Cannot read property 'definition' of undefined]
为什么国家/地区协会使用postgre-connection?
答案 0 :(得分:0)
好吧,由于这两个模型位于不同的数据库连接上,因此您无法进行实际的SQL连接。我认为你需要的是
User.find({id: 1}).exec(function(user) {
var theUser = user;
Country.find(user.country_id)
.exec(function(country) {
theUser.country = country;
return theUser;
}); });
我不确定您要解决的具体需求是什么,但由于国家/地区的查找表不太可能经常更改,并且在完全不同的数据存储中,我建议将此数据缓存在Redis之类的内容中或Memcache。然后在您的用户查找回调上,您可以从缓存商店中按ID获取国家/地区。除非您希望此数据定期更改,否则速度会快得多。您可以编写一个在其他数据库中执行延迟查找的服务,然后从缓存中提供服务,或者在应用程序启动时预先缓存它们。