4

我正在尝试跨多个表进行连接(三个表加上中间的连接表)。我认为 korma 正在懒惰地评估最后一次加入。我要做的是添加一个限制连接中第一个表的结果的条件,但我只对连接中最后一个表的字段感兴趣。

例如,假设我有clubs,peoplehobbies表,以及people-to-hobbies最后两个的连接表。每个俱乐部可以有很多人,每个人可以有很多爱好。

我正在尝试获取属于特定俱乐部的人的所有爱好的完整详细信息,但我不想要club表格中的任何字段。连接表意味着 korma 将创建两个查询,一个用于获取特定俱乐部中的所有人员,另一个用于通过people-to-hobbies连接表检索该人的爱好。

我的 korma 查询看起来像这样:

(select clubs
  (with people
    (with hobbies
      (fields :hobby-name :id)
      (where {:clubs.name "korma coders"}))))

问题是我还没有指定我要从哪些字段中选择clubspeople,默认是选择*。我怎样才能不包含这些表中的字段?这是否可能,或者hobbies延迟加载的事实是否意味着 korma 必须在第一个查询中返回一些结果(这让我得到一个过滤的人员列表),所以当我稍后来询问它的爱好时,它有运行第二个查询所需的 ID?

4

1 回答 1

1

在这种情况下我会使用join宏:

(select clubs
  (join people)
  (join people-to-hobbies)
  (join hobbies)
  (fields :hobbies.hobby-name :hobbies.id)
  (where {:clubs.name "korma coders"}))))

它更明确一点,但作为一个额外的好处,它可以通过单个查询运行。

于 2014-07-22T15:07:58.873 回答