2016-01-23 3 views
1

Я не могу SELECT COUNT(*) от лица, которое я сопоставил в Корме.Невозможно SELECT COUNT (*) для объекта Korma с полями по умолчанию

Вот моя сущность:

(declare users responses) (korma/defentity users (korma/entity-fields :id :slack_id :active :token :token_created) (korma/many-to-many responses :userresponses))

И вот моя попытка SELECT COUNT(*):

(korma/select schema/users (korma/fields ["count(*)"]) (korma/where {:slack_id slack-id}))

Я получаю эту ошибку:

ERROR: column "users.id" must appear in the GROUP BY clause or be used in an aggregate function at character 8 STATEMENT: SELECT "users"."id", "users"."slack_id", "users"."active", "users"."token", "users"."token_created", count(*) FROM "users" WHERE ("users"."slack_id" = $1)

Похоже, что Korma включает в себя мои сущности, хотя я задаю поля для выбора в этом запросе. Как мне переопределить это?

+0

http://stackoverflow.com/questions/25825252/restricting-select-fields-with-korma является смутно подобный, но относится к поведению по умолчанию '(select)' без заданных полей. – fzzfzzfzz

ответ

1

Вы не можете переопределить его как таковое. Функции управления запросом Корма: always additive, поэтому заданные поля просто указывают дополнительные полей.

Чтобы обойти эту проблему, вы можете rewrite this query to select against the users table itself вместо Корме лица users:

(korma/select :users 
    (korma/fields ["count(*)"]) 
    (korma/where {:slack_id slack-id})) 

Но тогда вам придется обходиться без чего-либо другого, определенного в users сущности.

В качестве альтернативы, вы можете переписать этот объект не определяет никаких сущностей-полей, а затем определить обернутую версию этого объекта с заданными полями по умолчанию:

(korma/defentity users-raw 
    (korma/many-to-many responses :userresponses))) 

(def users 
    (korma/select 
    users-raw 
    (korma/fields [:id :slack_id :active :token :token_created])))``` 

Тогда вы можете написать свои обычные запросы, добавляя with/where пункты к этому «пользователи» запрос, и только непосредственно касаться users-raw, когда нужно исключить те поля:

(-> users (with ...) (where ...) (select)) 

 Смежные вопросы

  • Нет связанных вопросов^_^