使用:Ecto Elixir中的inner_lateral

时间:2016-10-18 11:18:06

标签: elixir ecto

我试图使用ecto的:inner_lateral并且我写了这个查询

SnapshotExtractor
|> order_by(desc: :created_at)
|> limit(1)
|> join(:inner_lateral, [se], cam in fragment("SELECT * FROM cameras as cam WHERE cam.id = ?", se.camera_id))
|> select([se, cam], { se.from_date, se.to_date, se.interval, se.schedule, cam.exid, cam.timezone})
|> Repo.one

它的工作正常,给了我很好的结果,但它给了我一个未命名的对象,没有结果值的名称..问题是我们可以添加名称的值吗?我的结果值是

{#Ecto.DateTime<2016-02-25 00:00:00>, #Ecto.DateTime<2016-02-25 00:00:00>, 0,
 %{"Friday" => [], "Monday" => ["0:0-0:0"], "Saturday" => [], "Sunday" => [],
   "Thursday" => [], "Tuesday" => [], "Wednesday" => []}, "oscar2", nil}

1 个答案:

答案 0 :(得分:1)

你所称的“未命名对象”是一个元组。你得到的是因为你的select表达式是一个元组。如果要为它们命名,可能需要Map。要获取地图,只需在select表达式中返回一个地图:

|> select([se, cam], %{ from_date: se.from_date, to_date: se.to_date, interval: se.interval, schedule: se.schedule, exid: cam.exid, timezone: cam.timezone})

如果您将返回值分配给foo,则可以使用foo.from_datefoo.to_date等访问字段。