私は subqueryload/subqueryload_all をかなり頻繁に使用しており、サブクエリロード中に使用されるクエリを非常に明示的に定義する必要があるエッジケースに遭遇しました。たとえば、投稿とコメントがある状況があります。私のクエリは次のようになります。
posts_q = db.query(Post).options(subqueryload(Post.comments))
ご覧のとおり、各投稿のコメントを読み込んでいます。問題は、すべての投稿のコメントが必要ないことです。削除されたフィールドも考慮する必要があり、作成時間の降順で並べ替える必要があります。これが行われていることを私が観察した唯一の方法は、relationship()
投稿とコメントの間の宣言にオプションを追加することです。私はこれをしないことを好みます.b / cは、アプリ内にこれらの制約が適用されない可能性のある他の場所があるため、その関係をその後どこでも再利用できないことを意味します.
私がやりたいのは、投稿のコメントを読み込むために subqueryload/subqueryload_all が使用するクエリを明示的に定義することです。DisjointedEagerLoading hereについて読みましたが、基本クエリを受け取る特別な関数と、指定された関係をロードするクエリを定義するだけでよいようです。これは、この状況に適した方法ですか? 以前にこのエッジケースに遭遇したことのある人はいますか?