从模型中获取 table 个名称

Get table name form a model

所以我有这样的模型

Qber.V1.CustomerModel

这是存储在我的代码中的变量 queryable

defp build_select(queryable, opts_select \ []) do
  case opts_select do
    nil -> 
      queryable
    IO.inspect opts_select
    select when is_list(select) ->
      IO.inspect select
      map =  Enum.map(select, &String.to_existing_atom/1)
      IO.inspect map  
      a =  from queryable, select: ^map
      IO.inspect a
   end
end

现在,当我 运行 查询时,它将 select 映射到整个模型,但我想要的是 customers table 像这样而不是整个 Qber.V1.CustomerModel

我该怎么做?

model = queryable
    IO.inspect model
    Map.values(model.__struct__.__meta__)
    [Ecto.Schema.Metadata, nil, {nil, table_name}, :built] = Map.values(model.__struct__.__meta__)
    table = table_name

所以我是这样实现的。

如果你没理解错的话,你有2张表:

  • customer_models
  • customers

并且您想使用 customers 通过模型 Qber.V1.CustomerModel 获取数据。

如果是这样,那么 Ecto 2.x 通过

支持
from customer in {"customers", Qber.V1.CustomerModel}, …