Fetch unique users with distinct query

How to fetch unique user by ‘user_id’ a query with distinct

Resources:

  1. Ash.Domain.User

  2. Ash.Domain.Project
    has_many :milestones

  3. Ash.Domain.Milestone
    belongs_to :project
    has_many :tasks

  4. Ash.Domain.Task
    belongs_to :milestone
    has_one :task_assignee

  5. Ash.Domain.TaskAssignee
    belongs_to :user
    belongs_to :task

How to fetch unique users from a project using a distinct query?

I tried this below query:
Project
|> Ash.Query.filter(name: “example”)
|> Ash.Query.load([milestones: [tasks: :task_assignee]])
|> Ash.Query.distinct([:user_id])
|> Ash.read!()

  • unknown error: :distinct

I think you’d have a lot better luck with something like:

User
|> Ash.Query.filter(exists(task_assignee.task.milestone.project, name == "example"))

than trying to load distinct users starting at Project. If you did want to do it, though, you’d need something like:

Project
|> Ash.Query.filter(name: “example”)
|> Ash.Query.load([milestones: [tasks: task_assignee: Ash.Query.distinct(TaskAssignee, :user_id)]])
|> Ash.Query.distinct([:user_id])
|> Ash.read!()
|> # extract all of the task assignees from this data structure, because you will get back a list of `%Project{}`
1 Like