@KuzmenkoArtem

Почему не находит поле eloquent laravel?

Есть такой запрос
$items = Company::select("*", DB::raw("COUNT(contacts.id) AS count_contacts"))
                ->leftJoin('contacts', function ($join) {
                    $join->on('contacts.company_id', '=', 'companies.id');
                })->whereNotIn('companies.status', $status1)
                ->whereNotIn('contacts.status', $status2)
                ->orWhere('count_contacts', '>', 0)
                ->groupBy('companies.id');

Ошибка: Column not found: 1054 Unknown column 'count_contacts' in 'where clause'
Почему так получается и как можно её обойти? Спасибо.

UPD: Для простоты восприятия, обновил запрос
$items = Company::select("*", DB::raw("COUNT(contacts.id) AS count_contacts"))
                ->leftJoin('contacts', function ($join) {
                    $join->on('contacts.company_id', '=', 'companies.id');
                })->where('count_contacts', '>', 0)
                ->groupBy('companies.id');


UPD UPD : Вопрос решился, переделыванием логики. Ошибка была в неправильном использовании sql. Всем спасибо за помощь
  • Вопрос задан
  • 243 просмотра
Решения вопроса 1
@KuzmenkoArtem Автор вопроса
Вопрос решился, переделыванием логики. Ошибка была в неправильном использовании sql
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
AmdY
@AmdY
PHP и прочие вебштучки
Выведи запрос для отладки, есть подозрение, что твой where относится к джойну, а не основной сущности. Мешать Eloquent и билдер с джойнами - плохая идея.
Если у вас 5.3 версия фреймворка, то там есть withCount
Ответ написан
Комментировать
@UnQuaiz
Я не хочу вас расстраивать, но даже если бы у вас было такое поле в таблице - вы бы всё равно ничего не нашли таким способом, потому что неправильно используете агрегацию.

Есть подозрение что вы хотите выбрать компании, у которых есть контакты и статусы компаний не находятся в status1 а статусы контактов не находятся в status2. Причем если найдены контакты и компании с такими условиями - выбрать все, если нет - то выбрать только те которые содержат контакты. Результат выборки (по вашим условиям ) всегда будет одинаковый, независимо от статусов Компаний или Контактов (т.к. пытаетесь добавить условие 'or count(contacts.id) > 0'.

Если бы вы написали что вы вообще хотите сделать - то можно было бы подсказать вам решение.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы