#elixir #ecto
#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:
То, что вы называете «неназванным объектом», является кортежем. Вы получаете это обратно, потому что ваше select
выражение является кортежем. Вам, вероятно, нужна карта, если вы хотите дать им имена. Чтобы вернуть карту, просто верните карту в 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
, и т.д.
Комментарии:
1. Спасибо.. Я не знал об этом! через 7 минут.. Я приму ответ.