Laravel В laravel 5 читать данные из postgresql-функции

mstdmstd

Новичок
Всем привет,
В laravel 5.5 я получаю данные из postgresql-функции

PHP:
DB::SELECT($sql)
где 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)
?

Спасибо!
 
Сверху