def get_orders_with_global_settings do query = from o in Order, join: s in Setting, on: true, # Global join select: o, s Repo.all(query, prefix: UniEcto.Plugin.get_tenant_prefix()) end Handling Migrations with The Plugin The trickiest part of multi-tenancy is database schema updates. You cannot just run mix ecto.migrate .

if Mix.env() == :prod do UniEcto.Plugin.set_tenant_prefix("public") end If you are searching for "uni ecto plugin," you might actually be looking for a specific adapter. Here is the landscape:

| Library | Strategy | Best For | | :--- | :--- | :--- | | | PostgreSQL Schemas | Most Elixir SaaS apps (Gold standard) | | Uni Ecto Plugin | Custom (Configurable) | Developers needing fine-grained control | | Apartment (Rails) | Row-level (Legacy) | Not recommended for Elixir | | Ash Framework Multi-Tenancy | Resource Layer | Large, complex domain models |

# Bad user = Repo.get(User, 1) |> Repo.preload(:orders) user = Repo.get(User, 1) orders = Repo.preload(user, :orders, prefix: UniEcto.Plugin.get_tenant_prefix()) 3. Mix Tasks Crashing Error: Running mix phx.server fails because no tenant is set during compilation. Fix: Guard your plugin calls: