我正在尝试跨多个表进行连接(三个表加中间的连接表)。我认为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吗?
答案 0 :(得分:1)
我在这种情况下使用join
宏:
(select clubs
(join people)
(join people-to-hobbies)
(join hobbies)
(fields :hobbies.hobby-name :hobbies.id)
(where {:clubs.name "korma coders"}))))
它更加明确,但作为额外的好处,它可以通过单个查询运行。