mstdmstd
Новичок
Всем привет,
В laravel 5.5 я получаю данные из postgresql-функции
где sql :
и функция определена как:
И я получаю на выходе массив :
я парсер написал - но он работает правильно, если в текстовой строке нет запятой - иначе данные неправильны.
А как правильно и нет другого способа читать postgresql-функции кроме
?
Спасибо!
В laravel 5.5 я получаю данные из postgresql-функции
PHP:
DB::SELECT($sql)
Код:
select pd_report_orders_sum_by_categories( p_category_list := ARRAY[102,17]::integer[], p_last_operation_date_from := '2012-09-20', p_last_operation_date_till := '2017-09-29', p_status := 'O', p_sort_categories := 'sum', p_limit := null )
Код:
CREATE OR REPLACE FUNCTION public.pd_report_orders_sum_by_categories(p_category_list INTEGER[], p_last_operation_date_from TIMESTAMP WITHOUT TIME zone, p_last_operation_date_till TIMESTAMP WITHOUT TIME zone, p_status type_order_status, p_sort_categories CHARACTER VARYING DEFAULT 'by_sum_asc'::CHARACTER VARYING, p_limit INTEGER DEFAULT NULL::INTEGER)
RETURNS TABLE(category_name CHARACTER VARYING, category_slug CHARACTER VARYING, category_id SMALLINT, sold_sum NUMERIC, qty_sum BIGINT)
LANGUAGE SQL
AS $function$
SELECT c.name AS category_name,
c.slug AS category_slug,
pc.category_id,
SUM( oi.qty*oi.price ) AS sold_sum,
SUM( oi.qty ) AS qty_sum
FROM pd_order_item AS oi JOIN
pd_product_category AS pc ON pc.product_id = oi.product_id JOIN
pd_order AS o ON o.id = oi.order_id JOIN
pd_category AS c ON c.id = pc.category_id
WHERE ( CASE WHEN p_category_list IS NOT NULL THEN pc.category_id = ANY (p_category_list) ELSE TRUE END ) AND
( o.last_operation_date BETWEEN COALESCE(p_last_operation_date_from,pd_f_min_timestamp()) AND COALESCE(p_last_operation_date_till,pd_f_max_timestamp()) ) AND
( CASE WHEN p_status IS NOT NULL THEN o.status = p_status ELSE TRUE END )
GROUP BY pc.category_id, category_name, category_slug
ORDER BY
CASE WHEN p_sort_categories = 'by_sum_asc' THEN
SUM( oi.qty*oi.price )
END ASC,
CASE WHEN p_sort_categories = 'by_sum_desc' THEN
SUM( oi.qty*oi.price )
END DESC,
CASE WHEN p_sort_categories = 'by_sum_category_name' THEN
c.name
END ASC
LIMIT p_limit ;
$function$
И я получаю на выходе массив :
Код:
Array
(
[0] => stdClass Object
(
[pd_report_orders_sum_by_categories] => (Music,music,4,2.43,1)
)
[1] => stdClass Object
(
[pd_report_orders_sum_by_categories] => ("Computer Accessories",computer-accessories,1,25.75,1)
)
А как правильно и нет другого способа читать postgresql-функции кроме
PHP:
DB::SELECT($sql)
Спасибо!