2017-02-02 23 views
0

私のアプリケーションには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がクエリに「グローバル」である)を持っています。

これを動作させる方法に関するアイデアはありますか?

+0

データベースレベルで別のビューを作成して使用するとよいでしょう。 – JustMichael

答えて

関連する問題