0 / 0 / 1
Регистрация: 21.02.2010
Сообщений: 351
1

При выборе из Ad модели выбрать по кол-ву в связанной модели ad_images

03.02.2020, 19:46. Показов 694. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет
В laravel 6 с фильтром из таблицы ads и хочу установить условие чтобы возвращались только с существующими
каритинками в ad_images используя havingRaw:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
        $prefix= DB::getTablePrefix();
 
        $ads = Ad
            ::getByTitle($this->filter_title)
            ->onlyNoneInfo()
            ->getByStatus('A')
            ->getUserByStatus('A')
            ->leftJoin('users', 'users.id', '=', 'ads.creator_id')
            ->orderBy($this->order_by, $this->order_direction)
 
            ->select(
                'ads.*',
                'users.name as creator_username',
                'users.email as creator_email',
                'users.phone as creator_phone'
            )
            ->addSelect(['ad_images_count' => AdImage
                ::selectRaw('count(*)')
                ->whereColumn('ad_images.ad_id', 'ads.id')
            ])
 
            ->offset($limit_start)
            ->take($ads_per_page)
 
 
            ->havingRaw(' ( SELECT count(*) '.
                ' FROM `'.$prefix.'ad_images'.'` '.
                ' WHERE '.$prefix.'ad_images.ad_id = `'.$prefix.'ads`.`id` ) > ?', [0])
            ->paginate($ads_per_page)
И получаю ошибку :
Код
Unknown column 'ads-backend-api.sda_ads.id' in 'where clause' (SQL: 
select count(*) as aggregate from `sda_ads` left join `sda_users` on `sda_users`.`id` = `sda_ads`.`creator_id` where `ad_type` <> I and `sda_ads`.`status` = A and `sda_users`.`status` = A having  ( SELECT count(*)  FROM `sda_ad_images`  WHERE sda_ad_images.ad_id = `sda_ads`.`id` ) > 0
Похоже что `sda_ads`.`id` в подзапросе и вызывает ошибку и непонятно почему.Неправильно обернул ?

Я также пробовал и без “`” символа :


PHP
1
2
3
->havingRaw(' ( SELECT count(*) '.
    ' FROM `'.$prefix.'ad_images'.'` '.
    ' WHERE '.$prefix.'ad_images.ad_id = '.$prefix.'ads.id ) > ?', [0])

и ошибка :
Код
Unknown column 'ads-backend-api.sda_ads.id' in 'where clause' (SQL: select count(*) as aggregate from `sda_ads` left join `sda_users` on `sda_users`.`id` = `sda_ads`.`creator_id` where `ad_type` <> I and `sda_ads`.`status` = A and `sda_users`.`status` = A having  ( SELECT count(*)  FROM `sda_ad_images`  WHERE sda_ad_images.ad_id = sda_ads.id ) > 0
В моем базе ads-backend-api есть таблица sda_ads table с полем id.

“sda_” префикс базы в конфе базы данных.

В чем проблема и как ее исправить ?

Спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.02.2020, 19:46
Ответы с готовыми решениями:

Выбор в таблице данных модели ссылки на экземпляр связанной модели
Есть ли какой-то автоматизированный способ вывести на страницу таблицу с записями модели, одно из...

Запрос: кол-во объектов связанной модели, согласно условию, должно быть равно 1 или другому значению
Доброго времени суток. Есть 2 модели: гости и визиты, связь один ко многим, необходимо получить...

Rails. Доступ к полям связанной таблицы. Имя связанной модели и поля в переменных
Добрый день, добрым людям! Вероятно ответ прост, однако найти его сам оперативно не смог. Есть...

при выборе марки вывести только ее модели
Имеются 3 таблицы АВТО, МАРКА, МОДЕЛЬ. Хочу сделать так, чтобы при выборе марки в комбобоксе...

2
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16842 / 6721 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
03.02.2020, 21:53 2
А где в запросе вы подцепляете эту таблицу? Я вижу только попытку к ней обратиться, без предварительного указания, что это за таблица..
З.ы. почему вы не сделали нормально связи? Ларавел же отлично поддерживает их из коробки, и не надо будет городить подобные конструкции
0
0 / 0 / 1
Регистрация: 21.02.2010
Сообщений: 351
04.02.2020, 07:49  [ТС] 3
Сорри, а можно ли чуть подробнее?

В запросе есть подзапрос addSelect - но в первом запроск на кол-вао строк он опускаеся судя по запосу ошибки


Если добавить связь к таблице с картинками :
PHP
1
2
3
4
            ->getUserByStatus('A')
            ->leftJoin('users', 'users.id', '=', 'ads.creator_id')
            ->leftJoin('ad_images', 'ad_images.ad_id', '=', 'ads.id')  // ADDED
            ->orderBy($this->order_by, $this->order_direction)
все равно ошибка.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.02.2020, 07:49
Помогаю со студенческими работами здесь

Автозаполнение полей графическими данными (фото): при выборе модели принтера
Помогите, пожалуйста, с реализацией возможности автозаполнения поля изображением. В примере-при...

Конструирование url, ссылки в шаблоне и выборка из связанной модели
Есть приложение blog, в нем есть связанные модели Category, SubCategory, Post. В шаблонах...

MVC 5. Передать название бренда связанной модели, а не идентификатор
Здравствуйте, возникла следующая проблема: Нужно чтобы в представление Каталога товаров...

Связать два TComboBox таким образом, чтобы при выборе модели машины во втором ComboBox отображалась марка авто
Здравствуйте, очень нужна помощь,у меня есть база данных по прокату автомобилей(в ней 3 таблицы:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru