首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何跟踪刚刚添加到数据库中的内容的实体id?

如何跟踪刚刚添加到数据库中的内容的实体id?
EN

Stack Overflow用户
提问于 2015-03-05 01:06:14
回答 1查看 75关注 0票数 1

在html-post页面上,用户可以输入各种字段并点击submit,

我的router.clj代码看起来像

代码语言:javascript
复制
 (POST "/postGO" [ post-title post-input post-tags :as request ]
    (def email (get-in request [:session :ze-auth-email]))
      ;; connect to datomic and write in the request
    (dbm/add-ze-post post-title post-input post-tags email) ;; db insert

    {:status 200, 
     :body "successfully added the post to the database", 
     :headers {"Content-Type" "text/plain"}}) ;;generic return page

它运行良好,但我想将用户重定向到一个页面,该页面可以显示他们上传的帖子。要做到这一点,有一个实体的开斋节将是非常有帮助的。

代码语言:javascript
复制
;; code from my dbm file for playing directly with the database
;; id est: the db transact code
(defn add-ze-blurb [title, content, tags, useremail]
  (d/transact conn [{:db/id (d/tempid :db.part/user),
                     :post/title title,
                     :post/content content,
                     :post/tag tags,
                     :author/email useremail}]))

在成功地将某些内容添加到DB之后,是否有任何方法可以让数据体返回eid,或者应该在之后使用另一个查询来确保它在那里?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-05 04:47:50

对于简单的情况,只需删除d/transact返回的未来并使用:tx-data。完整的例子:

代码语言:javascript
复制
(require '[datomic.api :refer [db q] :as d])
(def uri "datomic:mem://test")
(d/create-database uri)

(def conn (d/connect uri))
(def schema [{:db/id (d/tempid :db.part/db)
              :db/ident :foo
              :db/valueType :db.type/string
              :db/cardinality :db.cardinality/one
              :db.install/_attribute :db.part/db}])
@(d/transact conn schema)

(def tempid (d/tempid :db.part/user))
(def tx [{:db/id tempid :foo "bar"}])
(def result @(d/transact conn tx)) ;; 
(def eid (:e (second (:tx-data result))))
(assert (= "bar" (:foo (d/entity (db conn) eid))))

您也可以使用d/resolve-tempid

代码语言:javascript
复制
(def eid (d/resolve-tempid (db conn) (:tempids result) tempid))
(assert (= "bar" (:foo (d/entity (db conn) eid))))

正如在数据体文档中所描述的,在deref之后,事务将被事务处理程序应用,并且返回的数据反映了数据库的新值。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28868228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档