我正在尝试通过多个表(中间的三个加入表)进行连接。我认为Korma懒洋洋地评估了最后的联接。我要做的是添加限制联接中第一表结果的条件,但我只对加入的最后一个表中的字段感兴趣。
因此,例如说我有clubs
,people
和hobbies
表,以及最后两个people-to-hobbies
加入表。每个俱乐部都可以有很多人,每个人都有许多爱好。
我正在尝试获取属于特定俱乐部的所有人的所有爱好的全部细节,但我不希望从club
表中进行任何领域。加入表意味着Korma将创建两个查询,一个是让所有在特定俱乐部中的人,另一个是通过people-to-hobbies
加入表来检索该人的爱好。
我的Korma查询看起来像这样:
(select clubs
(with people
(with hobbies
(fields :hobby-name :id)
(where {:clubs.name "korma coders"}))))
问题是我尚未指定我想要的哪些字段,从clubs
和people
中,默认值是选择*
。我如何不包括这些表中的字段?这是可能的吗,还是hobbies
懒洋洋地加载的事实是指Korma必须在第一个查询中返回一些结果(这使我有一个过滤的人列表),因此,当我以后来询问它以进行爱好时,它是否需要运行第二个查询的ID?
在这种情况下,我会使用join
宏:
(select clubs
(join people)
(join people-to-hobbies)
(join hobbies)
(fields :hobbies.hobby-name :hobbies.id)
(where {:clubs.name "korma coders"}))))
它有点明确,但是作为附加的好处,它是通过单个查询运行的。