Ecto.Model

Models are Elixir modules with Ecto-specific behaviour.

This module provides some convenience functions for working with models.

Using

When used, this module works as an "umbrella" module that adds a bunch of functionality to your module:

By using Ecto.Model all the functionality above is included and both Ecto.Model and Ecto.Query modules are imported. However, you can avoid using Ecto.Model altogether in favor of cherry picking the functionality above.

Importing

You may want to import this module in contexts where you are working with different models. For example, in a web application, you may want to import this module into your plugs to provide conveniences for assigning, building and accessing model information.

Source

Summary

assoc(model_or_models, assoc)

Builds a query for the association in the given model or models

build(struct, assoc)

Builds a structs from the given assoc in model

primary_key(struct)

Returns the model primary key value

Types

t :: %{}

Functions

assoc(model_or_models, assoc)

Builds a query for the association in the given model or models.

Examples

In the example below, we get all comments associated to the given post:

post = Repo.get Post, 1
Repo.all assoc(post, :comments)

assoc/2 can also receive a list of posts, as long as the posts are not empty:

posts = Repo.all from p in Post, where: is_nil(p.published_at)
Repo.all assoc(posts, :comments)
Source
build(struct, assoc)

Builds a structs from the given assoc in model.

Examples

If the relationship is a has_one or has_many and the key is set in the given model, the key will automatically be set in the built association:

iex> post = Repo.get(Post, 13)
%Post{id: 13}
iex> build(post, :comment)
%Comment{id: nil, post_id: 13}

Note though it doesn't happen with belongs to cases, as the key is often the primary key and such is usually generated dynamically:

iex> comment = Repo.get(Post, 13)
%Comment{id: 13, post_id: 25}
iex> build(comment, :post)
%Post{id: nil}
Source
primary_key(struct)

Specs:

  • primary_key(t) :: any

Returns the model primary key value.

Raises Ecto.NoPrimaryKeyError if model has no primary key.

Source