Loopbackjs strong循环-hasOne关系
我在建立hasOne关系方面遇到了一些麻烦,这可能是因为我错误地理解了这种关系 我有两个模型,一个用户模型和一个位置模型。我现在要添加的是用户和位置之间的关系,这意味着用户有一个当前位置。但是如果我在用户模型上设置了一个hasOne与位置的关系,那么我最终会在位置中得到一个userId属性。但这是完全错误的,因为多个用户可以拥有相同的当前位置,所以用户模型应该存储位置id,而不是用户id所在的位置。那么,我如何实现我想要的,以便以后可以查询用户并包括当前位置Loopbackjs strong循环-hasOne关系,loopbackjs,strongloop,has-one,Loopbackjs,Strongloop,Has One,我在建立hasOne关系方面遇到了一些麻烦,这可能是因为我错误地理解了这种关系 我有两个模型,一个用户模型和一个位置模型。我现在要添加的是用户和位置之间的关系,这意味着用户有一个当前位置。但是如果我在用户模型上设置了一个hasOne与位置的关系,那么我最终会在位置中得到一个userId属性。但这是完全错误的,因为多个用户可以拥有相同的当前位置,所以用户模型应该存储位置id,而不是用户id所在的位置。那么,我如何实现我想要的,以便以后可以查询用户并包括当前位置 当然,我可以向用户添加一个属性,并将
当然,我可以向用户添加一个属性,并将位置的id存储在那里,但是我不能很容易地将位置包含在用户请求中。因此,我更愿意使用关系来实现这一点。关系名称指的是“hasine”的关系含义,这意味着对于每个用户,location表中都有一个(并且只有一个)条目。每个用户在位置表中“有一个”条目,如果您的数据需要显示两个用户具有相同的位置,则这意味着位置表将使用不同的用户ID存储相同的位置数据。这对于关系映射来说仍然很好,并且允许您进行User.location调用 您要查找的内容稍有不同,即“Location hasMany Users”,因为您将与多个用户共享Location条目。将此理解为“对于每个位置条目,许多用户都可以共享它。”当您希望返回包含位置数据的用户时,您必须以稍微不同的方式进行查询,并使用
include:['location']
过滤器(否则您只能获得locationId值)
关系生成器:
$ slc loopback:relation
? Select the model to create the relationship from: Location
? Relation type: has many
? Choose a model to create a relationship with: user
? Enter the property name for the relation: users
? Optionally enter a custom foreign key:
? Require a through model? No
location.json:
{
"name": "Location",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"lat": {
"type": "number"
},
"long": {
"type": "number"
}
},
"validations": [],
"relations": {
"users": {
"type": "hasMany",
"model": "user",
"foreignKey": "locationId"
}
},
"acls": [],
"methods": {}
}
根据Brian的帖子的评论,您的问题有点不清楚,但是如果您确实需要用户共享一组给定的位置,那么您最好使用
User
belongsTo
location
这将在User
中创建locationId
字段,您将能够获取api\Users\{userId}\location
最后,您可以设置一个位置
hasMany
用户
从给定位置检索所有用户非常感谢您的解释,现在它确实更有意义了。是的,看来你的解决方案就是我想要的。但是你说我可以使用include过滤器来获取用户对象的位置,但这似乎对我不起作用。我只得到一个错误关系\“location\”没有为用户模型定义
,这是有意义的,因为关系现在是在位置模型上定义的,而不是在用户模型上定义的。当然,我可以在第二次呼叫中使用locationId来获取位置,但是如果一次呼叫可以,那就太好了。谢谢为了简化并能够使用将附加到模型的内置方法,只需使用用户具有一个位置关系并使用不同的用户ID存储相同的位置。确保这会使用更多的存储空间,但这在总体方案中并不多(假设位置仅为几列值或lat/long)。您正在用一点点额外的存储空间换取更少的代码/复杂性。谢谢,不幸的是,我还有其他与位置模型有关系的模型,因此我不想为每个用户创建同一位置的新实例,然后也必须相应地更新所有其他关系。但是没关系,我会在一个单独的调用中使用locationId来获取位置,或者在一个调用中使用远程钩子来提供位置;我以为我尝试了一个属于
关系的,但一定是切换了模型,或者忘了清除旧模式。