sasha-hohloma
@sasha-hohloma
Fullstack Developer

Почему не могу использовать where, а только whereRaw?

Пишу запрос в POSTGRESQL базу c двумя JOIN, наблюдаю странную магию. Если в любом месте запроса использую whereIn или where, то POSGRESQL ругается примерно так:

ERROR:  bind message supplies 3 parameters, but prepared statement \"pdo_stmt_00000009\" requires 4


Если ручками переписываю на whereRaw, то ошибка уходит и всё работает как ожидается. Конечно, можно прожить с использованием whereRaw, но всё же хотелось бы понять причину такого поведения

Версии
Laravel Framework 7.28.4
PostgreSQL 13.1

Код запроса (рабочая версия):

$table = DB::
    table("stocks")->
    select("products.product_id")->
    selectRaw("SUM(stocks.quantity_full) AS quantity_full")->
    selectRaw("SUM(stocks.in_way_to_client) AS in_way_to_client")->
    selectRaw("SUM(stocks.in_way_from_client) AS in_way_from_client")->
    rightJoin("sizes", "sizes.barcode", "=", "stocks.size_id")->
    rightJoin("products", function($join) use($brands, $subject) {
        return $join->
            on("sizes.product_id", "=", "products.product_id")->
            whereRaw("products.brand IN (".implode($b.")")->
            when($subject > 0, function($query) use($subject) {
                return $query->whereRaw("products.subject_id = ". $subject);
            });
    })->
    groupBy("products.product_id");
  • Вопрос задан
  • 176 просмотров
Решения вопроса 1
sasha-hohloma
@sasha-hohloma Автор вопроса
Fullstack Developer
Ответ оказался довольно прост - нужно внимательней читать документацию
Проблем заключалась в использовании указанного запроса внутри другого запроса через leftJoin. Взамен необходимо было использовать leftJoinSub
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
pLavrenov
@pLavrenov
Разработка сайтов
Потому что в where не работают такие конструкции "products.brand"
Ответ написан
Ваш ответ на вопрос

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

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