私のアプリケーションにはChild
のスキーマ/モデルがあり、多くの関連するChildAttendance
レコードがあります。Ecto Query - 1つの関連するオブジェクトに複数のレコードをプリロードする
私はかなり簡単に与えられた子供のためのchild_attendances
のすべてをプリロードすることができます
from ch in Child, preload: [:child_attendances]
私が何をしたいのですがどのような与えられた子供のための最後出席レコードをプリロードされ、か子供のセット。
私は次のことを試してみました:
def with_last_attendance(query \\ Child) do
last_attendance = from att in ChildAttendance,
order_by: [desc: att.in_at],
limit: 1
from query, preload: [last_attendance: ^last_attendance]
end
上記の作品を、しかし、親クエリは、単一の子(すなわちlimit: 1
は合計で返される出席レコードの数を制限している)を返すされている場合のみ。例えば
、last_attendance
会合にロード単一ChildAttendance
レコードを含む子レコードと、予想通り
Repo.one!(Child |> where([ch], ch.id == ^child_id) |> with_last_attendance)
作品。
しかし、クエリが複数の子を返している場合:返さChild
レコードの
Repo.all(Child |> with_last_attendance)
一方のみがロードされlast_attendance
協会(limit: 1
がクエリに「グローバル」である)を持っています。
これを動作させる方法に関するアイデアはありますか?
データベースレベルで別のビューを作成して使用するとよいでしょう。 – JustMichael