Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 按EXTO顺序排列的变量_Elixir_Ecto - Fatal编程技术网

Elixir 按EXTO顺序排列的变量

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

我只是在学习长生不老药,我不知道如何在ORDERBY语句中使用变量。我有两个变量
排序
方向
。这是我正在处理的查询,我想按顺序替换
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(),这是处理这个问题的最佳方法吗?