J'ai dans mon tableau "influencer_platforms"
DB qui se compose de:Comment grouper des enregistrements dans Ecto et les renvoyer sous forme de carte?
id | influencer_handle | name
Je veux les interroger et le groupe par nom comme:
%{
name1: [%{id: 1, influencer_handle: "i1"}, %{id: 3, influencer_handle: "i2"}],
name2: [%{id: 2, influencer_handle: "i3"}]
}
Comment les faire dans Ecto
? Jusqu'à présent j'ai:
defmacrop influencer_platform_json(influencer) do
quote do
fragment(
"jsonb_agg(?)",
fragment(
"json_build_object(?, ?, ?, ?)",
"id", unquote(influencer).id,
"influencer_handle", unquote(influencer).influencer_handle
)
)
end
end
def all do
from ip in InfluencerPlatform,
group_by: :name,
select: %{
ip.name => influencer_platform_json(ip)
}
end
Est-ce une façon plus élégante de l'atteindre?
Peut-être utiliser 'bind_quoted' pour éviter de ne pas avoir plusieurs fois le mot' influencer'? –
@MikeBuhot Je ne sais pas si ça marche dans 'fragment'. – squixy