turbo_ecto v0.1.5 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.
Link to this section Summary
Functions
Builds a search Ecto.Query.t
on top of a given Ecto.Query.t
variable
with given params
Link to this section Functions
Link to this function
build_search_mapbox(arg, mapbox, queryable)
Builds a search Ecto.Query.t
on top of a given Ecto.Query.t
variable
with given params
.
Example
When search_type is :like
iex> params = %{"q" => %{"name_like" => "elixir"}}
iex> Turbo.Ecto.Hooks.Search.run(Turbo.Ecto.Product, params)
#Ecto.Query<from p in subquery(from p in Turbo.Ecto.Product), where: like(p.name, ^"%elixir%")>
When search_type is :ilike
iex> params = %{"q" => %{"name_ilike" => "elixir"}}
iex> Turbo.Ecto.Hooks.Search.run(Turbo.Ecto.Product, params)
#Ecto.Query<from p in subquery(from p in Turbo.Ecto.Product), where: ilike(p.name, ^"%elixir%")>
When search_type is :eq
iex> params = %{"q" => %{"price_eq" => 100}}
iex> Turbo.Ecto.Hooks.Search.run(Turbo.Ecto.Product, params)
#Ecto.Query<from p in subquery(from p in Turbo.Ecto.Product), where: p.price == ^100>
When search_type is :gt
iex> params = %{"q" => %{"price_gt" => 100}}
iex> Turbo.Ecto.Hooks.Search.run(Turbo.Ecto.Product, params)
#Ecto.Query<from p in subquery(from p in Turbo.Ecto.Product), where: p.price > ^100>
When search_type is :lt
iex> params = %{"q" => %{"price_lt" => 100}}
iex> Turbo.Ecto.Hooks.Search.run(Turbo.Ecto.Product, params)
#Ecto.Query<from p in subquery(from p in Turbo.Ecto.Product), where: p.price < ^100>
When search_type is :gteq
iex> params = %{"q" => %{"price_gteq" => 100}}
iex> Turbo.Ecto.Hooks.Search.run(Turbo.Ecto.Product, params)
#Ecto.Query<from p in subquery(from p in Turbo.Ecto.Product), where: p.price >= ^100>
When search_type is :lteq
iex> params = %{"q" => %{"price_lteq" => 100}}
iex> Turbo.Ecto.Hooks.Search.run(Turbo.Ecto.Product, params)
#Ecto.Query<from p in subquery(from p in Turbo.Ecto.Product), where: p.price <= ^100>
when use and
symbol condition
iex> params = %{"q" => %{"name_and_body_like" => "elixir"}}
iex> Turbo.Ecto.Hooks.Search.run(Turbo.Ecto.Product, params)
#Ecto.Query<from p in subquery(from p in subquery(from p in Turbo.Ecto.Product),
where: like(p.body, ^"%elixir%")), where: like(p.name, ^"%elixir%")>
when use or
symbol condition
iex> params = %{"q" => %{"name_or_body_like" => "elixir"}}
iex> Turbo.Ecto.Hooks.Search.run(Turbo.Ecto.Product, params)
#Ecto.Query<from p in subquery(from p in subquery(from p in Turbo.Ecto.Product),
or_where: like(p.body, ^"%elixir%")), where: like(p.name, ^"%elixir%")>
when use assoc
iex> params = %{"q" => %{"category_name_like" => "elixir"}}
iex> Turbo.Ecto.Hooks.Search.run(Turbo.Ecto.Product, params)
#Ecto.Query<from p in subquery(from p in Turbo.Ecto.Product), join: c in assoc(p, :category), where: like(c.name, ^"%elixir%")>
when use and
&& or
&& assoc
condition
iex> params = %{"q" => %{"category_name_or_name_and_body_like" => "elixir"}}
iex> Turbo.Ecto.Hooks.Search.run(Turbo.Ecto.Product, params)
#Ecto.Query<from p in subquery(from p in subquery(from p in subquery(from p in Turbo.Ecto.Product),
where: like(p.body, ^"%elixir%")),
join: c in assoc(p, :category),
where: like(c.name, ^"%elixir%")), or_where: like(p.name, ^"%elixir%")>
when multi association && or
&& and
condition
iex> params = %{"q" => %{"product_category_name_and_product_name_or_name_like" => "elixir"}}
iex> Turbo.Ecto.Hooks.Search.run(Turbo.Ecto.Variant, params)
#Ecto.Query<from v in subquery(from v in subquery(from v in subquery(from v in Turbo.Ecto.Variant),
or_where: like(v.name, ^"%elixir%")),
join: p in assoc(v, :product),
join: c in assoc(p, :category),
where: like(c.name, ^"%elixir%")), join: p in assoc(v, :product), where: like(p.name, ^"%elixir%")>