Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir EXTO-基于关联查询表_Elixir_Ecto - Fatal编程技术网

Elixir EXTO-基于关联查询表

Elixir EXTO-基于关联查询表,elixir,ecto,Elixir,Ecto,我有以下表格: schema "project_users" do belongs_to(:user, MyApp.User) end 及 我想在查询与is有归属关系的用户之后,根据搜索向量结果查询项目用户 我对用户进行了以下查询。我想知道如何将其与项目用户联系起来: def query_all_users(params \\ %{}, preload \\ []) do query = from(u in User, preload: ^preload) query_by(qu

我有以下表格:

schema "project_users" do
  belongs_to(:user, MyApp.User)
end

我想在查询与is有
归属关系的
用户之后,根据
搜索向量
结果查询
项目用户

我对
用户进行了以下查询
。我想知道如何将其与
项目用户联系起来

def query_all_users(params \\ %{}, preload \\ []) do
  query = from(u in User, preload: ^preload)

  query_by(query, params)
end

defp query_by(query, %{"keyword" => keyword} = params) do
  query = from(q in query, where: fragment("search_vector @@ plainto_tsquery(?)", ^keyword))

  query_by(query, Map.delete(params, "keyword"))
end
schema "users" do
  field(:search_vector, :tsvector)

  has_one :project_user, ProjectUser  # <---
end

如果我答对了,您需要
有一个
/
有许多
关系
用户
项目用户

更新架构
用户

def query_all_users(params \\ %{}, preload \\ []) do
  query = from(u in User, preload: ^preload)

  query_by(query, params)
end

defp query_by(query, %{"keyword" => keyword} = params) do
  query = from(q in query, where: fragment("search_vector @@ plainto_tsquery(?)", ^keyword))

  query_by(query, Map.delete(params, "keyword"))
end
schema "users" do
  field(:search_vector, :tsvector)

  has_one :project_user, ProjectUser  # <---
end

我建议进行一个查询,进行连接,然后按如下方式进行筛选:

defmodule ProjectUser do
  use Ecto.Schema

  import Ecto.Query

  schema "project_users" do
    belongs_to :user, User
  end

  @spec by_search_vector(Ecto.Queryable.t, String.t) :: Ecto.Query.t
  by_search_vector(query, search_vector) do
    from pu in query,
      join: u in assoc(pu, :user),
      where: fragment("? @@ plainto_tsquery(?)", u.search_vector, ^search_vector)
  end
end
这将很容易地缩小项目用户的范围