BaseModel v0.3.0 BaseModel behaviour

BaseModel provides a simple set of CRUD functions to an Ecto Model via a __using__ macro. For Example:

defmodule Db.Models.Person do
  use BaseModel, repo: Db.Repo

  schema "persons" do
    field :name, :string
    field :age, :integer
  end
end

The use BaseModel line adds the following methods to the Person Model:

  • Person.create(params)
  • Person.all(opts \\ [order_by: :none, preload: []])
  • Person.find(id, opts \\ [preload: []])
  • Person.first(where, opts \\ [preload: []])
  • Person.first(where_clause, opts \\ [order_by: :none, preload []])
  • Person.first_or_create(where_clause, opts \\ [order_by: :none, preload []])
  • Person.where(where_clause, opts \\ [order_by: :none, limit: :none, preload: []])
  • Person.count(where_clause \\ [])
  • Person.delete(id_or_struct)
  • Person.delete_all()
  • Person.delete_where(where_clause)
  • Person.update(model, params)
  • Person.update_where(where_clause, params)

This model can now be interacted with in a more fluent manner than raw ecto:

iex> {:ok, model} = Person.create(name: "chris", age: 99)
{:ok, %Person{name: "chris", age: 99}}
iex> Person.update(model, age: 18)
{:ok, %Person{name: "chris", age: 18}}
iex> Person.where(age: 18)
[%Person{name: "chris", age: 18}]

Link to this section Summary

Link to this section Types

Link to this type model()
model() :: map()
Link to this type params()
params() :: map() | Keyword.t()

Link to this section Functions

Link to this macro __using__(list) (macro)

Link to this section Callbacks

Link to this callback create_changeset(params)
create_changeset(params()) :: Ecto.Changeset.t()
Link to this callback update_changeset(model, params)
update_changeset(model(), params()) :: Ecto.Changeset.t()