【发布时间】:2014-01-20 19:05:56
【问题描述】:
我正在尝试跨多个表进行联接(三个表加上中间的联接表)。我认为 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?
【问题讨论】:
-
我不得不选择额外的字段并在 Clojure 中将它们过滤掉,这似乎很遗憾 - 这意味着我正在通过我的数据库连接传送我不需要的额外数据。因此,虽然我已经解决了这个问题,但它在我的代码中引入了额外的复杂性,并在我的网络上增加了额外的负载。