【问题标题】:Using :inner_lateral in Ecto Elixir在 Ecto Elixir 中使用 :inner_lateral
【发布时间】:2016-10-18 19:22:16
【问题描述】:

我试图使用 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}

【问题讨论】:

    标签: elixir ecto


    【解决方案1】:

    您所说的“未命名对象”是一个元组。因为你的 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_datefoo.to_date等访问字段。

    【讨论】:

    • 谢谢.. 我不知道这一点! 7分钟后..我会接受答案。
    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多