预加载试图获取错误的列名
Preload trying to get the wrong column name
我有以下对象。
defmodule Ketchup.Review do
...
schema "order_review" do
...
has_many :review_tags, Review.Tag
end
end
和
defmodule Ketchup.Review.Tag do
...
schema "review_tag" do
...
belongs_to :order_review, Ketchup.Review
end
end
并使用以下查询
@preload [:review_tags, :order]
def get_review_by_order(order_id) do
Ketchup.Review
|> where([c], c.order_id == ^order_id)
|> preload(^@preload)
|> Repo.one()
end
报错如下:
** (Ecto.QueryError) deps/ecto/lib/ecto/association.ex:495: field `Ketchup.Review.Tag.review_id` in `where` does not exist in the schema in query:
from t in Ketchup.Review.Tag,
where: t.review_id == ^2,
order_by: [asc: t.review_id],
select: {t.review_id, t}
这 review_id
哪里来的?我已经检查了所有代码以供审查以及任何原子或关联,但找不到任何东西。应该是 order_review_id
.
评论标签是通过以下迁移创建的:
create table(:review_tag) do
add :review_tag, :string
add :order_review_id, references(:order_review, on_delete: :delete_all)
end
Ecto 正在尝试使用密钥 review_id
,因为您的模块名称以 Review
结尾。如果您想使用其他密钥,则必须在 has_many/3
调用中指定 :foreign_key
选项。
has_many :review_tags, Ketchup.Review, foreign_key: :order_review_id
请注意,我是根据您指定的 belongs_to/3
猜测键名。
我有以下对象。
defmodule Ketchup.Review do
...
schema "order_review" do
...
has_many :review_tags, Review.Tag
end
end
和
defmodule Ketchup.Review.Tag do
...
schema "review_tag" do
...
belongs_to :order_review, Ketchup.Review
end
end
并使用以下查询
@preload [:review_tags, :order]
def get_review_by_order(order_id) do
Ketchup.Review
|> where([c], c.order_id == ^order_id)
|> preload(^@preload)
|> Repo.one()
end
报错如下:
** (Ecto.QueryError) deps/ecto/lib/ecto/association.ex:495: field `Ketchup.Review.Tag.review_id` in `where` does not exist in the schema in query:
from t in Ketchup.Review.Tag,
where: t.review_id == ^2,
order_by: [asc: t.review_id],
select: {t.review_id, t}
这 review_id
哪里来的?我已经检查了所有代码以供审查以及任何原子或关联,但找不到任何东西。应该是 order_review_id
.
评论标签是通过以下迁移创建的:
create table(:review_tag) do
add :review_tag, :string
add :order_review_id, references(:order_review, on_delete: :delete_all)
end
Ecto 正在尝试使用密钥 review_id
,因为您的模块名称以 Review
结尾。如果您想使用其他密钥,则必须在 has_many/3
调用中指定 :foreign_key
选项。
has_many :review_tags, Ketchup.Review, foreign_key: :order_review_id
请注意,我是根据您指定的 belongs_to/3
猜测键名。