J'ai une requête qui tire dans les relations à utiliser dans un api json. Si j'exclus l'instruction select, cela fonctionne correctement, cependant, lorsque j'insère l'instruction select, les relations n'apparaissent pas. J'ai besoin de l'instruction select pour inclure une sous-requête pour un attribut. Comment puis-je spécifier les relations dans le select pour qu'elles s'affichent?Ecto sélectionner les relations de précharge
journal_entries = from entry in JournalEntry,
select: %{
entry: entry,
id: entry.id,
account_id: entry.account_id,
archived_at: entry.archived_at,
date: entry.date,
deleted_at: entry.deleted_at,
is_closing: entry.is_closing,
is_confirmed: entry.is_confirmed,
note: entry.note,
amount: (fragment("(SELECT sum(amount) FROM journal_entry_lines WHERE kind = 0 and journal_entry_id = ?)", entry.id))
},
preload: [
:journal_entry_lines,
journal_entry_lines: :journal_entry,
journal_entry_lines: :chart_account
],
where: entry.account_id == ^user.account_id
and is_nil(entry.deleted_at)
Il existe de nombreuses lignes de journal pour chaque écriture de journal, comment éviter la duplication? –
Vous n'avez pas vraiment. Lorsque vous appelez 'preload/3', il fait une requête distincte pour charger ces données afin d'éviter la duplication. Vous pouvez suivre cette route et faire plusieurs requêtes. –