Hacker News new | ask | show | jobs
by out_of_protocol 34 days ago
> ActiveRecord is more pleasant to work with than the ORM of Phoenix IMHO, but not everyone shares the same feeling.

Well, depends on what you do. Ecto is closely follows SQL logic and allows to translate weird sql queries into code directly. All queries are explicit, e.g. you either do preload(...) or can't access nested records at all, no chance of N+1 by design.

Changesets are also different and are just functions you can define as needed.

    defmodule MyApp.User do
    ...
    def changeset(user, attrs) do
        user
        |> cast(attrs, [:email])
        |> validate_required([:email])
        # This matches the error from the DB uniq index to the :email field
        |> unique_constraint(:email)
    end
1 comments

It's fun watching other languages orms be 10 years behind in design.

Your example is a common anti pattern from PHP orms 15 years ago.

1) that's not an ORM

2) after ~8 years of using it, i find it ergonomic, light on congitive load and good for long term support

Calling it not an ORM just cause it implements a DTO is splitting hairs. It's an ORM. If you are hydrating an object that saves to storage and you are manipulating it's life cycle and then casting types between your storage primitives and your language primitives from memory to disk you are writing code that every other ORM is writing and it's not special.

As soon as you add use Ecto.Schema to your model it's an ORM.

> But it doesn't require a database and queries have to be explicit!

yea yea that's a feature of every ORM

Could be wrong, but i dont think thats an orm.