2017-02-03 9 views
0

クエリで別のテーブルに結合して値を返そうとしていますが、セカンダリテーブルから値が見つからない場合は、 ?被験者のためにその日のいずれかの宿題があるかどうかをチェックしwhere: h.deadline == ^this_monday,で何が起こるElixir/Phoenixクエリで条件が失敗した場合は空を返します

Repo.all(from p in Subjectclass, where: p.user_id == ^user.id, 
              join: f in Subject, 
              on: p.subject_id == f.id, 
              join: z in Schedule, 
              on: f.id == z.subject_id, 
              where: z.weekday == 1, 
              join: t in User, 
              on: f.user_id == t.id, 
              join: h in Homework, 
              on: f.id == h.subject_id, 
              where: h.deadline == ^this_monday, 
              group_by: f.title, 
              group_by: t.surname, 
              group_by: z.timeslot_id, 
              group_by: h.body, 
              order_by: z.timeslot_id, 
              select: %{title: f.title, teacher: t.surname, homework: h.body}) 

は、ここに私のクエリです。しかし、(宿題なしの)対象者がいなければ、その要素全体を最終結果から削除するだけです。

私の質問:最後の結果(選択:)では宿題なしの要素(タイトル:「数学」、先生:「ボブ」、宿題:「」)を含むことができますか、スペース?現在のコードでは、要素全体が最終結果から削除されます。

ありがとうございます!

スキーマは:参加宿題テーブルのユニークなフィールドになるように

left_join: h in Homework, 
on: f.id == h.subject_id and h.deadline == ^this_monday, 

schema "subjectclasses" do 
    belongs_to :user, Kz.User 
    belongs_to :subject, Kz.Subject 
    timestamps() 
end 

schema "subjects" do 
    field :lvl, :integer 
    field :title, :string 
    field :week, :integer 
    belongs_to :user, Kz.User 
    has_many :subjectclasses, Kz.Subjectclass 
    timestamps() 
end 

schema "schedules" do 
    field :subject_id, :integer 
    field :weekday, :integer 
    belongs_to :timeslot, Kz.Timeslot 
    timestamps() 
end 

schema "users" do 
    field :firstname, :string 
    field :surname, :string 
    field :level, :integer 
    field :username, :string 
    field :encrypted_password, :string 
    belongs_to :role, Kz.Role 
    has_many :subjects, Kz.Subject 
    has_many :subjectclasses, Kz.Subjectclass 
    field :password, :string, virtual: true 
    timestamps() 
end 

schema "homeworks" do 
    field :body, :string 
    field :deadline, Ecto.Date 
    belongs_to :subject, Kz.Subject 
    timestamps() 
end 
+0

私は、 'left_join:h in Homework'(' join'の代わりに)をしたいと思っています。それはあなたに「宿題:なし」を与えるはずですが、スキーマについての詳細がなければテストすることはできません。 – Dogbert

+0

ちょっと@Dogbert、あなたの提案を試みましたが、それは助けになりませんでした。だから私はスキーマを追加 – Ilya

+0

ああ。私のコメントを無視する。 'left join 'は条件が' where'にあるのでここでは何もしません。 – Dogbert

答えて

0

でそれを解決しました。

関連する問題