【发布时间】:2018-02-06 17:34:23
【问题描述】:
我有一个看起来像这样的模式模型。
USER => MEETING <= PROJECT
uuid | user_uuid |
| project_id | id
hour
我想用json渲染,像这样的一个对象:
{
uuid:"",
first_name:"",
project: [
{
name:""
meeting: [
hour:""
]
}
]
}
所以一个用户有很多(在这种情况下是many_to_many)项目,一个项目有很多(many_to_many)用户。
我还添加了项目和会议之间的关系,因为我想在项目中呈现会议数据,我的“项目”架构关系:
many_to_many :user, User, join_through: Meeting, join_keys:
[project_id: :id, user_uuid: :uuid]
has_many :meeting, Meeting
问题是,当我预加载我的数据时,我为用户获得了正确的项目,但我获得了该项目的所有会议,即使用户不是其中的一部分。
我知道问题出在哪里,因为我正在通过项目预加载会议,ecto 不关心用户 uuid,它只查看项目 ID,因此它正在加载所有会议。
我这样预加载我的数据:
Repo.all(User)
|> Repo.preload(project: :meeting)
如何预加载所有用户及其所有项目并将该项目的所有会议与用户关联?
【问题讨论】:
标签: elixir phoenix-framework ecto