Пишу запрос в 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");