Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

umairparacha's avatar

when i add a where clause on a withCount it send error

"SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'status' in where clause is ambiguous (SQL: select `id`, `full_name`, (select count(*) from `student_assignments` inner join `enrollments` on `enrollments`.`id` = `student_assignments`.`enrollment_id` where `students`.`id` = `enrollments`.`student_id` and `status` = 1) as `assignments_count`, (select count(*) from `student_assignments` inner join `enrollments` on `enrollments`.`id` = `student_assignments`.`enrollment_id` where `students`.`id` = `enrollments`.`student_id`) as `Total` from `students` limit 100)",

This is my query.

$this->model
            ::query()
            ->select(['id', 'full_name'])
            ->withCount([
                'assignments' => function ($query) {
                    $query->where(
                        'status',
                        '=',
                        StudentAssignment::STATUS_ACTIVE
                    );
                },
                'assignments as Submitted' => function (Builder $query) {
                    $query->where(
                        'status',
                        '=',
                        StudentAssignment::STATUS_SUBMITTED
                    );
                },
                'assignments as Total'
            ])
            ->limit($limit)
            ->orderByDesc('Pending')
            ->get();

if remove this from withCount() it will work.

				'assignments as Pending' => function ($query) {
                    $query->where(
                        'status',
                        '=',
                        StudentAssignment::STATUS_ACTIVE
                    );
                },
                'assignments as Submitted' => function (Builder $query) {
                    $query->where(
                        'status',
                        '=',
                        StudentAssignment::STATUS_SUBMITTED
                    );
                },
0 likes
2 replies
SilenceBringer's avatar
Level 55

@umairparacha set the table name explicitly for status column

->withCount([
                'assignments as active_assignments' => function ($query) {
                    $query->where(
                        'active_assignments.status',
                        '=',
                        StudentAssignment::STATUS_ACTIVE
                    );
                },
                'assignments as submitted' => function (Builder $query) {
                    $query->where(
                        'submitted.status',
                        '=',
                        StudentAssignment::STATUS_SUBMITTED
                    );
                },
                'assignments as Total'
            ])

Please or to participate in this conversation.