korma / fields可以采用一系列列吗?

时间:2018-02-12 11:35:13

标签: clojure korma sqlkorma

我希望能够传递用户定义的字段数组,其中包含需要提取的所有列的列表。 korma / fields可以采用一系列列吗?

我基本上想要创建的是这样的:

(defn fetch [fields]
(->
   (korma/select* foo)

   (as-> query
         (if (not-empty? fields)
           (korma/fields query fields)
           query))

   (korma/select)))

1 个答案:

答案 0 :(得分:1)

  

我假设这是因为我已经指定了无效的实体字段。因此,我想知道,是否可以覆盖defentity中指定的实体字段?

我认为你的假设是正确的,也可以覆盖它。如果您查看由(defentity foo)生成的地图,则其中包含所有字段的:fields键。 korma.core/entity-fields不会替换已经存在的内容,但这会:

(-> foo
    (assoc :fields [:first])
    (korma/select*)
    (korma/as-sql))
=> "SELECT \"foo\".\"first\" FROM \"foo\""
  

我希望能够传递用户定义的字段数组,其中包含需要提取的所有列的列表。

(defn fetch [& fields]
  (-> (korma/select* foo)
      (as-> query
        (if (seq fields)
          (assoc query :fields fields)
          query))
      (korma/select)))

我在这个示例中使用了可变参数来镜像korma.core/entity-fields(并使fetch返回我测试的SQL字符串而不是执行查询):

(fetch :first :last)
=> "SELECT \"foo\".\"first\", \"foo\".\"last\" FROM \"foo\""
(fetch)
=> "SELECT \"foo\".\"id\", \"foo\".\"first\", \"foo\".\"last\" FROM \"foo\""