首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取关联与ecto的关联

获取关联与ecto的关联
EN

Stack Overflow用户
提问于 2017-11-09 03:27:13
回答 1查看 218关注 0票数 0

我有4张桌子,分别是:

代码语言:javascript
复制
Category -> sub1 -> sub2 -> product

表已定义

类别

代码语言:javascript
复制
-name
-id
-description

sub1

代码语言:javascript
复制
-id
-category_id
-name
-description

sub2

代码语言:javascript
复制
-id
-sub1_id
-name
-description

产品

代码语言:javascript
复制
-id
-sub2_id
-name
-description
-color

我将我的模式定义为:

category.ex

代码语言:javascript
复制
schema "categories" do
    field :name, :string

    timestamps()
  end

sub1.ex

代码语言:javascript
复制
 schema "sub1" do
    field :name, :string
    belongs_to :category, App.Category
    timestamps()
  end

sub2.ex

代码语言:javascript
复制
 schema "sub2" do
        field :name, :string
        belongs_to :sub1, App.Sub1
        timestamps()
      end

product.ex

代码语言:javascript
复制
  schema "product" do
            field :name, :string
            belongs_to :sub2, App.Sub2
            timestamps()
          end

在我的控制器中,我尝试将sub2和sub1预加载为

代码语言:javascript
复制
products = Product
                |> Repo.all
                |> Repo.preload(:sub2)
                |> Repo.preload(sub2: :sub1)

而且它起作用了。但是,当我尝试将类别预加载为

代码语言:javascript
复制
 products = Product
                    |> Repo.all
                    |> Repo.preload(:sub2)
                    |> Repo.preload(sub2: :sub1)
                    |> Repo.preload(sub1: :category)

我收到一个错误,说产品与sub1没有关联。有没有办法让这件事起作用?最终,我希望能够做到

代码语言:javascript
复制
product.sub2.sub1.category.name

,它将输出类别的名称。

EN

回答 1

Stack Overflow用户

发布于 2017-11-09 05:47:01

你试过Repo.preload(sub2: [sub1: [:category]])吗?

错误来自于最后一个预加载

代码语言:javascript
复制
Repo.all(Product) 
|> Repo.preload(sub2: sub1) 
|> Repo.preload(sub1: :category)

实际上回到了原始查询,所以它本质上是

代码语言:javascript
复制
Repo.all(Product) 
|> Repo.preload(sub1: :category)

根据您的模式,这是无效的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47188082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档