Конструктор запросов Laravel: предложение where после addSelect (mysql)

У меня есть запрос, который работает без последнего предложения where. Но с, не работает. Код:

$worksheets = Worksheet::withoutGlobalScopes()->selectRaw('COUNT(*)')
            ->whereColumn('worksheets.partner_id', 'partners.id')
            ->whereHas('tireServiceItems', function($query) {
                $query->where('service_type', 'like', 'szerelés%')->orWhere('service_type', 'like', 'javítás%');
            })
            ->where('service_date', '>=', $from)
            ->where('service_date', '<=', $to)
            ->when($partnerId, function($query) use ($partnerId) {
                $query->where('partner_id', $partnerId);
            })
            ->whereNull('worksheets.deleted_at');

return Partner::select('*')->addSelect(['worksheets_count' => $worksheets])
            ->where('worksheets_count', '>', 0)->paginate(20)->map(function($item) {
                return [
                    'partner_id' => $item->id,
                    'partner_name' => $item->name,
                    'partner_address' => $item->address(),
                    'worksheets_count' => $item->worksheets_count,
                ];
            })->toArray();

без where('worksheet_count', '>', 0) работает, с получением этой ошибки:

Столбец не найден: 1054 Неизвестный столбец «worksheets_count» в «where clause» (SQL: select count () как совокупность из partners, где worksheets_count> 0) *

Спасибо, если поможете мне :)

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
39
1

Ответы 1

вам нужно использовать "имея"

return Partner::select(['*', DB::raw($worksheets.' as worksheets_count')])
->having('worksheets_count', '>', 0)
->paginate(20)
...

вместо

->where('worksheets_count', '>', 0)

и сначала измените на

$worksheets = Worksheet::withoutGlobalScopes()
            ->whereColumn('worksheets.partner_id', 'partners.id')
            ->whereHas('tireServiceItems', function($query) {
                $query->where('service_type', 'like', 'szerelés%')->orWhere('service_type', 'like', 'javítás%');
            })
            ->where('service_date', '>=', $from)
            ->where('service_date', '<=', $to)
            ->when($partnerId, function($query) use ($partnerId) {
                $query->where('partner_id', $partnerId);
            })
            ->whereNull('worksheets.deleted_at')
            ->count();

Я пробовал, но получил ту же ошибку: Столбец не найден: 1054 Неизвестный столбец «worksheets_count» в «имеющем предложении» (SQL: select count (), что и агрегат от partners с worksheets_count> 0) "*

LaszloP 30.03.2021 22:36

@LaszloP Обновленный ответ

Ramiz Kongulov 30.03.2021 22:44

Снова та же ошибка: Столбец не найден: 1054 Неизвестный столбец «worksheets_count» в «имеющем предложении» (SQL: select count () как агрегат из partners, имеющий worksheets_count> 0) *

LaszloP 30.03.2021 22:56

@LaszloP Первый запрос не возвращает ответа, поэтому подстановка не сработала. Я заменил первый запрос

Ramiz Kongulov 30.03.2021 23:17

Другие вопросы по теме