这些HasManyThrough与HasAndBelongsToMany之间的差异是什么?
https://docs.strongloop.com/display/public/LB/HasManyThrough+relations
VS
https://docs.strongloop.com/display/public/LB/HasAndBelongsToMany+relations
答案 0 :(得分:6)
答案在于关系名称本身。我将使用文档中提供的示例。
HasManyThrough :
患者通过预约接诊了很多医生
在这里,医生和患者通过预约相互关联,但没有直接关系。预约模型有助于建立一种关系,因为它属于医生和患者。由于预约,患者可以预约任意数量的医生。并且医生可以看到许多预定他/她的患者。
<强> HasAndBelongsToMany 强>:
班级有很多学生,属于很多学生。
在这里,学生和班级直接相互关联。学生们通常会参加许多课程,如物理,化学等 - 所以他们有很多课程。由于每节课都参加,因此学生属于许多班级。 同样,许多学生都会上课 - 所以上课有很多学生。由于每个学生都有出勤率,因此班级属于很多学生。
注意:强>
答案 1 :(得分:2)
hasManyThrough
只是一个hasMany
关系,已定义了直通模型。请参阅https://github.com/strongloop/loopback-datasource-juggler/blob/4c9e91423f3d356bb544790075dcb7f891450096/lib/relation-definition.js#L659中的params.through
。
hasAndBelongsToMany
本质上是在双方设置hasManyThrough
关系的快捷方式。如果尚未定义through
模型,则它只是连接两个模型名称并尝试按该名称查找模型,如果失败则只尝试从该名称获取表中的关系(https://github.com/strongloop/loopback-datasource-juggler/blob/4c9e91423f3d356bb544790075dcb7f891450096/lib/relation-definition.js#L1630)
如果您在hasAndBelongsToMany
和Assembly
之间定义Part
关系,则会在hasMany
和belongsTo
之间设置Assembly
和AssemblyPart
关系{1}}以及Part和AssemblyPart之间的另一对。如果没有定义AssemblyPart
模型,它只会尝试使用一个名为assemblypart
的表(或者我猜是否MongoDB,我主要是一个RDBMS人)。它还将定义从hasManyThrough
到Assembly
的{{1}}关系,使用Part
作为直通模型(以便AssemblyPart
可用)及其assembly.parts
对应关系Part
1}}到Assembly
(part.assemblies
)。
我想说的是,您可以通过手动定义hasAndBelongsToMany
模型并使用相应的AssemblyPart
和hasMany
来与belongsTo
完全相同Assembly
和Part
模型以及两个hasManyThrough
:从Assembly
到Part
以及从Part
到Assembly
。