我试图使用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}
答案 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_date
,foo.to_date
等访问字段。