Korma通过另一张桌子



我有一些这样的表:

CREATE TABLE place (
    id INTEGER NOT NULL, 
    name VARCHAR(75)
);
CREATE TABLE place_services (
    id INTEGER NOT NULL,
    place_id INTEGER
);
CREATE TABLE service (
    name VARCHAR(100),
    value BOOL,
    place_services_id INTEGER
);

我正在使用clojure中的Korma库,我希望有一个查询,它可以获得一个id的位置,以及所有服务的列表。到目前为止,我有这个:

(defentity service)
(defentity place-services
  (table :place_services)
  (has-many service)
(defentity place
  (has-one place-services))
(select place
  (join place-services (= :place_services.place_id :id))
  (join service (= :place_services.id :service.place_services_id))     

这似乎生成了正确的连接,但不包括服务字段。我试着添加

(fields :service.name)

返回其中一个服务名称。我想知道是否有可能在一个查询中获得所有这些列表。由于

Korma将负责执行连接,因为您已经定义了关系:

   (select place (with place-services (with service)))

注意,这似乎做n+1查询,所以检查这是可接受的为您的应用程序。

如果您必须手动执行连接,您在字段中指定的任何字符串都将被传递给查询而不涉及它,因此您可以使用:

添加所有字段:
(select place
   (fields "service.*")
   (join place-services (= :place_services.place_id :id))
   (join service (= :place_services.id :service.place_services_id)))

相关内容

  • 没有找到相关文章

最新更新