如何将变量传递给 elixir/ecto 子查询?

问题描述 投票:0回答:1

我在下面的 ecto 中有这个查询:

query =
      from(tx in Treatment,
        join: ax in assoc(tx, :ax_sheet),
        join: ev in assoc(ax, :visit),
        join: evr in assoc(ev, :visit_revisions),
        where: is_nil(tx.visit_revision_id),
        where: not is_nil(ev.current_revision_id),
        select: %{
          id: tx.id,
          visit_revision_id: coalesce(ev.current_revision_id, subquery(
            from vr in VisitRevision,
            where: vr.visit_id == ^ev.id and vr.inserted_at <= ^tx.marked_at,
            order_by: [desc: vr.inserted_at],
            limit: 1,
            select: vr.id
          ))
        }
      )

我面临一个问题,在下面这一行出现以下错误:

 where: vr.visit_id == ^ev.id and vr.inserted_at <= ^tx.marked_at,

undefined variable ev
undefined variable tx

我的问题很简单。我该如何解决这个问题?我读到

subquery
无法检索我之前在外部查询中定义的内容,那么我如何简单地传递我需要的 id 呢?我是 Elixir 的新手,希望这是最容易解决的问题之一。谢谢。

elixir ecto
1个回答
0
投票

只需将您需要的东西分配给一些专用变量,然后使用新变量即可。例如

tx_marked_at = tx.marked_at
ev_id = ev.id

query = 
  from( #...
   #...
   where: vr.visit_id == ^ev_id and vr.inserted_at <= ^tx_marked_at,
© www.soinside.com 2019 - 2024. All rights reserved.