Как связать параметр в подзапросе в Laravel?

У меня есть подзапрос в соединении, в котором я использую предложение where, но это дает мне ошибку

Столбец не найден: 1054 Неизвестный столбец «products.id» в «где пункт»

Ниже мой запрос:

Product::leftJoin(
                'categories',
                'products.category_id',
                '=',
                'categories.id'
            )
            ->join('vendor_products', function ($join) {
                $join->on(
                    'products.id',
                    '=',
                    'vendor_products.product_id'
                )
            })
            ->leftJoin('brand_products', function ($join) {
                    $join->on(
                        'products.id',
                        '=',
                        'brand_products.product_id'
                    )->on(
                        'brand_products.brand_id',
                        '=',
                        DB::raw('(
                            SELECT brand_id FROM 
                            (SELECT brand_id, COUNT(brand_id) productCount 
                            FROM brand_products
                            where brand_products.product_id = products.id
                            inner join brand on brand_products.brand_id = brand.id
                            GROUP BY brand_id order by productCount desc, DATE(brand.created_at) asc limit 1) as results)')
                    );
            })
            ->get();

это строка, вызывающая ошибку where brand_products.product_id = products.id.

Любая помощь будет весьма ценна.


person Harris Khan    schedule 08.07.2020    source источник


Ответы (1)


В необработанном запросе также добавьте таблицу продуктов в FROM, как это

DB::raw('(
        SELECT brand_id FROM 
        (SELECT brand_id, COUNT(brand_id) productCount 
        FROM brand_products,products,brand
        where brand_products.product_id = products.id
        inner join brand on brand_products.brand_id = brand.id
        GROUP BY brand_id order by productCount desc, DATE(brand.created_at) asc limit 1) as results)')

Я надеюсь, что это сработает

person Khalid Khan    schedule 08.07.2020
comment
Синтаксическая ошибка или нарушение доступа: 1064 Ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы узнать правильный синтаксис для использования рядом с брендом внутреннего соединения на brand_products.brand_id = brand.id - person Harris Khan; 08.07.2020
comment
@HarrisKhan поместил внутреннюю строку соединения над предложением where - person Khalid Khan; 08.07.2020
comment
Нарушение ограничения целостности: 1052 Столбец 'brand_id' в списке полей неоднозначен, получая эту ошибку сейчас - person Harris Khan; 08.07.2020
comment
Я также пытаюсь использовать brand_products.brand_id, но безуспешно. - person Harris Khan; 08.07.2020
comment
@HarrisKhan добавьте бренд рядом с продуктами и brand_products в разделе ОТ - person Khalid Khan; 08.07.2020
comment
не могли бы вы отредактировать свой ответ, пожалуйста, чтобы я мог видеть, что именно мне нужно изменить - person Harris Khan; 08.07.2020
comment
@HarrisKhan Да, конечно, проверьте ответ сейчас - person Khalid Khan; 08.07.2020
comment
Синтаксическая ошибка или нарушение прав доступа: 1066 Неуникальная таблица/псевдоним: ошибка «бренда» - person Harris Khan; 08.07.2020
comment
@HarrisKhan говорит, что у вас нет таблицы с именем brand, поэтому проверьте свою базу данных, есть ли таблица с именем brand ?? - person Khalid Khan; 08.07.2020
comment
@HarrisKhan Может быть, название таблицы будет брендом ?? - person Khalid Khan; 08.07.2020