Repo.all失败,因为我有一个自定义主键

时间:2018-07-14 14:46:17

标签: elixir ecto

我为没有id字段的表生成并运行了迁移(使用字段league_id作为主键)。我确认迁移可以按预期进行(检查了psql中的数据库,并且该表确实没有id字段,而league_id是主键)。

运行Repo.all(League)时出现以下错误:

13:01:14.962 [debug] QUERY ERROR source="leagues" db=2.8ms

SELECT l0."id", l0."league_id" FROM "leagues" AS l0 []

** (Postgrex.Error) ERROR 42703 (undefined_column): column l0.id does not exist

是否有一种方法可以告诉Repo.all/1没有id字段(除了手动构建SELECT *型查询之外?)

2 个答案:

答案 0 :(得分:1)

如果您使用的主键列与id不同,则可以在声明架构时使用@primary_key属性来指定:

# See documentation link below for what values the options list accepts.
@primary_key {:league_id, :id, []} 
schema "leagues" do
  ...
end

或者如果您不想在查询中使用该列,则可以将键设置为false

@primary_key false
schema "leagues" do
  ...
end

The documentation对此进行了详细说明。

答案 1 :(得分:0)

仅供参考:当存在many_to_many关系时,我还必须覆盖模式块中的字段。

await