1

I have a query, and I'm trying to add a addSelect() to it, but it won't work, and I don't know why, according to the docs it seems correct

The query:

return Project::query()
    ->with('client')
    ->with('status')
    ->with('tasks')
    ->with('tasks.user.userAvatar')
    ->with('tasks.user')
    ->addSelect([
        'number_of_tasks' => Task::where('assigned_id', auth()->user()->id)->whereNull('finished_at')->count()
    ])

I got this error:

Column not found: 1054 Unknown column '4' in 'field list'

If I output it as a raw sql query:

"select `4` from `projects`"

I am trying to add select() to it, to select everything from Project, but nothing works, what am I doing wrong?

IGP
  • 14,160
  • 4
  • 26
  • 43
Telexx
  • 420
  • 2
  • 11

1 Answers1

1

You're going about it the wrong way.

This:

Task::where('assigned_id', auth()->user()->id)->whereNull('finished_at')->count()

Will result in an int. In this case, I think it's 4, which gives you the error.

I think you need to have the addSelect parameter be an array<string, Builder>. Try this:

->addSelect([
    'number_of_tasks' => Task::query()
        ->selectRaw('count(*)')
        ->where('assigned_id', auth()->user()->id)
        ->whereNull('finished_at');
])

Also, you can eager load multiple relationships within the same with() call by passing in an array.

return Project::query()
    ->with([
        'client',
        'status',
        'tasks',
        'tasks.user',
        'tasks.user.userAvatar',
    ])
    ->addSelect([
        'number_of_tasks' => Task::query()
            ->selectRaw('count(*)')
            ->where('assigned_id', auth()->user()->id)
            ->whereNull('finished_at'),
    ]);
IGP
  • 14,160
  • 4
  • 26
  • 43