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_Phoenix Framework_Ecto - Fatal编程技术网

Elixir 如何编写嵌套关系的EXTO代码

Elixir 如何编写嵌套关系的EXTO代码,elixir,phoenix-framework,ecto,Elixir,Phoenix Framework,Ecto,我有下面的DB表关系 州1-1Member1-NMemberAction 如果是SQL,我想获取数据 SELECT A.action, M.member_name, FROM MemberAction A JOIN Member M ON M.id = A.member_id JOIN Prefecture P ON M.prefecture_id = P.id 然而,我不知道如何用EXTO编写代码。 以下代码不起

我有下面的DB表关系

1-1
Member
1-N
MemberAction

如果是SQL,我想获取数据

    SELECT A.action, M.member_name, 
      FROM MemberAction A
      JOIN Member M 
        ON M.id = A.member_id
      JOIN Prefecture P
        ON M.prefecture_id = P.id
然而,我不知道如何用EXTO编写代码。 以下代码不起作用。由于
MemberAction没有关联

    query = from a in MemberAction,
            where: a.id == ^action_id,
            preload: [:member, :prefecture]
    Repo.all(query)
请给我一些建议

谢谢。

请使用

query=来自成员操作中的,
加入:我是会员,
on:[id:a.会员号]
加入:p在县,
日期:[id:m.U.id],
选择:{a.action,m.member_name}

您是如何定义模式的?确保它们与以下内容类似:

defmodule YourApp.Schema.Prefecture do
  use Ecto.Schema
  schema "prefectures" do
    # your fields

    has_one(:member)
  end
end

defmodule YourApp.Schema.Member do
  use Ecto.Schema
  schema "members" do
    # your fields

    belongs_to(:prefecture)
    has_many(:member_actions)
  end
end

defmodule YourApp.Schema.MemberAction do
  use Ecto.Schema
  schema "member_actions" do
    # your fields

    belongs_to(:member)
  end
end
然后您应该能够使用与您的查询非常相似的查询

    query = from a in MemberAction,
            where: a.id == ^action_id,
            preload: [member: :prefecture]
    Repo.all(query)

我不理解“preload:[成员::地区]”的一部分,它在本例中加载嵌套关联<代码>:地区不是
成员操作
的直接关联,因此您需要通过直接关联(即
:成员
)预加载它。这就是
预加载:[member::aperty]
部件所做的。您可以从文档中找到有关
exto.Query.preload
的更多信息