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
私は、 'left_join:h in Homework'(' join'の代わりに)をしたいと思っています。それはあなたに「宿題:なし」を与えるはずですが、スキーマについての詳細がなければテストすることはできません。 – Dogbert
ちょっと@Dogbert、あなたの提案を試みましたが、それは助けになりませんでした。だから私はスキーマを追加 – Ilya
ああ。私のコメントを無視する。 'left join 'は条件が' where'にあるのでここでは何もしません。 – Dogbert