Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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

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
Postgresql 如何使用软删除的联接表关联排除预加载_Postgresql_Elixir_Ecto - Fatal编程技术网

Postgresql 如何使用软删除的联接表关联排除预加载

Postgresql 如何使用软删除的联接表关联排除预加载,postgresql,elixir,ecto,Postgresql,Elixir,Ecto,使用长生不老药、异位查询、Postgres 我通过联接表UserLocation在用户和位置之间建立了关联。我使用deleted_at作为软删除,并在查询时检查is_nilul.deleted_at。 如果我软删除联接表记录,我将 %User{id: 1, name: "larskris", deleted_at: nil, location: #Ecto.Association.NotLoaded<association :location is not loaded>} %Use

使用长生不老药、异位查询、Postgres

我通过联接表UserLocation在用户和位置之间建立了关联。我使用deleted_at作为软删除,并在查询时检查is_nilul.deleted_at。 如果我软删除联接表记录,我将

%User{id: 1, name: "larskris", deleted_at: nil, location: #Ecto.Association.NotLoaded<association :location is not loaded>}
%UserLocation{id: 25, user_id: 1, location_id: 13, deleted_at: #DateTime<2018-01-17 18:01:45Z>}
%Location{id: 13, address: "Some street", deleted_at: nil}
上面返回用户,但也预加载了应该为零的位置。我总是想要用户,即使没有相关的位置

到目前为止,我尝试的所有方法都会预加载软删除位置

分别查询位置和用户,然后映射到它们以建立我需要的功能,但这并不理想。
使用内置关联也会返回软删除的位置。

可能只是使用预加载来使用左连接的问题,我认为您给定的语法本身会产生一个全新的预加载

从用户中的u, 左加入:ul在UserLocation中,在:a.id==ul.activity\u id上,并且在, 左连接:l在位置,在:ul.Location\u id==l.id,并且在, 其中:u.id==^user\u id,并且在, 预加载:[位置:l]
有关更多详细信息,请参阅。

谢谢,已被困数小时。我正在处理的查询比我在问题中孤立的问题要复杂一些。用户位置零件是嵌套的。这个链接也通过使用类似preload的东西帮助我解决了这个问题:[组织:{o,用户:{u,位置:l}]。我还使用了一个groupby,并且必须将o.id、u.id和l.id添加到groupby列表中,结果成功了。太棒了,谢谢!
Repo.one(
  from u in User,
  left_join: ul in UserLocation, on: a.id == ul.activity_id and is_nil(ul.deleted_at),
  left_join: l in Location, on: ul.location_id == l.id and is_nil(l.deleted_at),
  where: u.id == ^user_id
  and is_nil(u.deleted_at),
  preload: [:location]
)