turbo_ecto v0.3.0 Turbo.Ecto.Hooks.Search
This module provides a operations that can add searching functionality to
a pipeline of Ecto
queries. This module works by taking fields.
Inspire from: ex_sieve
Link to this section Summary
Functions
Returns the search object
Link to this section Types
Link to this section Functions
Returns the search object.
Examples
iex> params = %{"q" => %{"name_or_category.name_like" => "elixir", "price_eq" => 1}, "s" => "updated_at+asc", "per_page" => 5, "page" => 1}
iex> Turbo.Ecto.Hooks.Search.run(Turbo.Ecto.Product, params)
{:ok,
%Turbo.Ecto.Hooks.Search{
combinator: :and,
conditions: [
%Turbo.Ecto.Hooks.Search.Condition{
attributes: [
%Turbo.Ecto.Hooks.Search.Attribute{name: :name, parent: :query},
%Turbo.Ecto.Hooks.Search.Attribute{name: :name, parent: :category}
],
combinator: :or,
search_type: :like,
values: ["elixir"]
},
%Turbo.Ecto.Hooks.Search.Condition{
attributes: [
%Turbo.Ecto.Hooks.Search.Attribute{name: :price, parent: :query}
],
combinator: :and,
search_type: :eq,
values: [1]
}
],
groupings: []
}
}
iex> params = %{"filter" => %{"name_like" => "elixir", "price_eq" => 1}}
iex> Turbo.Ecto.Hooks.Search.run(Turbo.Ecto.Product, params)
{:ok,
%Turbo.Ecto.Hooks.Search{
combinator: :and,
groupings: [],
conditions: [%Turbo.Ecto.Hooks.Search.Condition{search_type: :like, values: ["elixir"], attributes: [%Turbo.Ecto.Hooks.Search.Attribute{name: :name, parent: :query}], combinator: :and}, %Turbo.Ecto.Hooks.Search.Condition{attributes: [%Turbo.Ecto.Hooks.Search.Attribute{name: :price, parent: :query}], combinator: :and, search_type: :eq, values: [1]}]}
}