我试图使用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}发布于 2016-10-18 11:22:16
您所指的“未命名对象”是一个元组。这是因为您的select表达式是元组的。如果你想给他们起名字的话,你可能想要地图。要返回一个Map,只需在select表达式中返回一个Map:
|> 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等访问字段。
https://stackoverflow.com/questions/40106803
复制相似问题