Ok, so I have these schemas
schema "players" do
field :email, :string
has_many :profiles, MyApp.Profile
has_many :worlds, through: [:profiles, :world]
end
schema "worlds" do
field :name, :string
has_many :profiles, MyApp.Profile
has_many :players, through: [:profiles, :player]
end
schema "settings" do
field :mode, :string
belongs_to :player, MyApp.Player
belongs_to :world, MyApp.World
end
All players are supposed to have one settings in each world they create by default. But due to logical errors in our code, some players didn't have settings in some world.
Now I'm trying to find those players
who don't have existing settings
record in some world so I can create default settings for them using a seeder.
I've tried workarounds like this
query = from profile in Profile
query
|> Repo.all()
|> Enum.each(fn profile ->
case get_settings(profile.player_id, profile.world_id) do
nil ->
create_settings(profile.player_id, profile.world_id)
_ ->
:ok
end
end)
It works but I want to avoid using the case statement. It costs a lot of database work.
Is there any way to fetch those players
with no existing settings
record in some worlds
using a query?
question from:
https://stackoverflow.com/questions/65598226/ecto-elixir-phoenix-fetch-records-with-no-associated-record 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…