Clojure korma/fields可以接受列数组吗?

Clojure korma/fields可以接受列数组吗?,clojure,korma,sqlkorma,Clojure,Korma,Sqlkorma,我希望能够传递一个用户定义的字段数组,其中包含需要获取的所有列的列表。korma/fields可以接受列数组吗 我本质上想要创造的是这样的东西: (defn fetch [fields] (-> (korma/select* foo) (as-> query (if (not-empty? fields) (korma/fields query fields) query)) (korma/selec

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

我本质上想要创造的是这样的东西:

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

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

   (korma/select)))
我假设这是因为我在Defensity中指定了实体字段。因此,我想知道是否可以覆盖
Defensity
中指定的实体字段

我认为你的假设是正确的,也有可能推翻这个假设。如果查看由
(DefensityFoo)
生成的映射,它有一个包含所有字段的
:fields
键。不会替换已有的内容,但这将:

(-> foo
    (assoc :fields [:first])
    (korma/select*)
    (korma/as-sql))
=> "SELECT \"foo\".\"first\" FROM \"foo\""
我希望能够传递一个用户定义的字段数组,其中包含需要获取的所有列的列表

在本例中,我使用可变参数来镜像
korma.core/entity字段
(并使
fetch
返回SQL字符串以进行测试,而不是执行查询):

(defn fetch [& fields]
  (-> (korma/select* foo)
      (as-> query
        (if (seq fields)
          (assoc query :fields fields)
          query))
      (korma/select)))
(fetch :first :last)
=> "SELECT \"foo\".\"first\", \"foo\".\"last\" FROM \"foo\""
(fetch)
=> "SELECT \"foo\".\"id\", \"foo\".\"first\", \"foo\".\"last\" FROM \"foo\""