2016-09-04 2 views
1

J'ai 2 tablesa-beaucoup ne fonctionne pas

CREATE TABLE public.user_account 
(
    id integer NOT NULL DEFAULT nextval('user_account_id_seq'::regclass), 
    email character(50) NOT NULL, 
    password character(100) NOT NULL, 
    CONSTRAINT user_account_pkey PRIMARY KEY (id) 
) 

CREATE TABLE public.recipe 
(
    id integer NOT NULL DEFAULT nextval('recipe_id_seq'::regclass), 
    user_account_id integer NOT NULL, 
    name text NOT NULL, 
    description text NOT NULL, 
    CONSTRAINT recipe_pkey PRIMARY KEY (id), 
    CONSTRAINT recipe_user_account_id_fkey FOREIGN KEY (user_account_id) 
     REFERENCES public.user_account (id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION 
) 

Voici ma déclaration clojure

(declare user_account recipe) 

(kc/defentity user_account 
      (kc/entity-fields :email :password) 
      (kc/has-many recipe {:fk :user_account_id}) 
      ) 

(kc/defentity recipe 
       (kc/entity-fields :user_account_id :name :description) 
       (kc/belongs-to user_account {:fk :user_account_id}) 
      ) 

Et je ne peux pas sélectionner la table user_account avec recipe

user=> (sql-only (kc/select user_account (with recipe) (where {:id 1}))) 
"SELECT \"user_account\".\"email\", \"user_account\".\"password\" FROM \"user_account\" WHERE (\"user_account\".\"id\" = ?)" 

Répondre

1

J'ai rencontré le même problème. La solution consistait à ajouter le champ pk à la liste entity-fields dans l'entité parente. Ce n'est vraiment pas intuitif, et semble que le problème est dans une mauvaise documentation. Donc la solution devrait être:

(declare user_account recipe) 

(kc/defentity user_account 
      (kc/entity-fields :id :email :password) 
;       ^^^ fix is here 
      (kc/has-many recipe {:fk :user_account_id}) 
      ) 

(kc/defentity recipe 
       (kc/entity-fields :user_account_id :name :description) 
       (kc/belongs-to user_account {:fk :user_account_id}) 
      ) 
+1

Un commuté à yesql à cause de ce problème et aussi une mauvaise documentation. Mais merci pour la réponse – nam