Используйте PostgreSQL array_to_string в Фениксе - PullRequest
0 голосов
/ 30 октября 2018

У меня есть 2 n-n отношения между posts и tags таблицами. Это мой запрос в Postgres:

SELECT t0.*, array_to_string(array_agg(t2.tag), ', ')
FROM "posts" AS t0
INNER JOIN "posts_tags" AS t1 ON (t0.id = t1.post_id)
INNER JOIN "tags" AS t2 ON (t1.tag_id = t2.id)
GROUP BY t0.id

Я пытался использовать нечто подобное в Ecto:

Repo.all(
  from p in Post,
    join: a in Post_Tag, on: p.id == a.post_id,
    join: t in Tag, on: a.tag_id == t.id,
    select: {p, array_to_string(array_agg(t.tag),', ')},
    limit: ^limit,
    offset: ^offset,
    group_by: p.id
)

Но я получаю эту ошибку:

(Ecto.Query.CompileError) `array_to_string(array_agg(t.tag()), ', ')` is not a valid query expression.

1 Ответ

0 голосов
/ 30 октября 2018

Вам понадобится использовать фрагмент / 1 для части array_to_string(...) вашего запроса. Я не проверял это, но это должно выглядеть примерно так:

fragment("array_to_string(array_agg(?), ', ')", t.tag)
...