Elixir 按EXTO顺序排列的变量
我只是在学习长生不老药,我不知道如何在ORDERBY语句中使用变量。我有两个变量Elixir 按EXTO顺序排列的变量,elixir,ecto,Elixir,Ecto,我只是在学习长生不老药,我不知道如何在ORDERBY语句中使用变量。我有两个变量排序和方向。这是我正在处理的查询,我想按顺序替换desc和date。我尝试了[^direction:entry.^sort],但它抛出了一个错误。有没有办法按顺序使用变量 journal_entries = from entry in JournalEntry, preload: [ :journal_entry_lines, journal_entry_lines: :journal_entry
排序
和方向
。这是我正在处理的查询,我想按顺序替换desc
和date
。我尝试了[^direction:entry.^sort]
,但它抛出了一个错误。有没有办法按顺序使用变量
journal_entries = from entry in JournalEntry,
preload: [
:journal_entry_lines,
journal_entry_lines: :journal_entry,
journal_entry_lines: :chart_account
],
where: entry.id in ^journal_entry_ids,
order_by: [desc: entry.date],
limit: 100,
offset: 0
由于中的键是一个变量,因此需要使用备用语法
iex(1)> a = :desc
:desc
iex(2)> [{a, :b}]
[desc: :b]
您还需要使用该函数动态访问字段名
以下几点应该行得通
journal_entries = from entry in JournalEntry,
preload: [
:journal_entry_lines,
journal_entry_lines: :journal_entry,
journal_entry_lines: :chart_account
],
where: entry.id in ^journal_entry_ids,
order_by: [{^direction, field(entry, ^sort)}],
limit: 100,
offset: 0
这假设
方向
变量是:asc
或:desc
中的一个,并且您的排序
变量是架构上的一个字段。如何指定该字段?我不把它作为一根绳子传进来吗?我在字段/2中得到了这个错误expected atom,得到了:“date”
No,您应该传入一个atom。可以使用将字符串转换为原子。但要小心,因为原子不是在长生不老药中被垃圾收集的。在任何给定的时间,系统中可以存在的原子数也有一个上限(这是可配置的)。我找到了String.to_atom(),这是处理这个问题的最佳方法吗?