Код Laravel для GROUP_CONCAT не работает

#mysql #laravel

#mysql #laravel

Вопрос:

Я хотел создать результаты, разделенные запятыми, в моем проекте Laravel, используя MySQL. Я знаю, что должен использовать GROUP_CONCAT, и я заставил его отлично работать на mysql с помощью workbench. Но у меня возникла ошибка, когда я использовал его в своем коде Laravel. Пожалуйста, проверьте мои фактические коды ниже. Когда я удаляю строку / часть GROUP_CONCAT, мой код работает идеально.

Код ошибки при вызове моего API: 500 (внутренняя ошибка сервера)

  $result = RmimWhQcHdr::from('wh_qc_hdrs as hdr')->select(
        'rr.TrxDate as RR Date',
        'hdr.rr_no as RR No',
        'hdr.inspected_at as Date of Inspection',
        'hdr.qcir_no as QCIR No',
        'hdr.item_code as Item Code',
        'item.ItemDesc as Item Description',
        'hdr.supplier_code as Supplier Code',
        'con.ContactName as Supplier Name',
        'hdr.reject_reason as Reason of Rejection',
        'hdr.cancel_reason as Reason of Cancellation',
        DB::raw('(CASE WHEN hdr.qc_status="A" THEN "Passed" 
                    WHEN hdr.qc_status="CA" THEN "Conditionally Approved"
                    WHEN hdr.qc_status="R" THEN "Rejected"
                    WHEN hdr.qc_status="C" THEN "Cancelled"
                    ELSE "N/A"
                END) as Disposition'),

        -- line below causes an error when I call my api, it works perfectly if I remove it.
        DB::raw('GROUP_CONCAT(dtl.parameters) as Failed Parameters')
    )

    ->leftJoin('rminv.tbl_rmtrninv as rr', function ($join){
        $join->on('hdr.rr_no', '=','rr.trxnum')
        ->where('rr.TransID', '=', 2);
    })
    ->leftJoin('rminv.tbl_rmmstitem as item', 'hdr.item_code', '=', 'item.ItemCode')
    ->leftJoin('fginv.tbl_fgmstcontacts as con','hdr.supplier_code','=','con.ContactCode')
    ->leftJoin('crp.wh_qc_dtls as dtl', function ($join){
        $join->on('hdr.id', '=','dtl.qc_id')
        ->where('dtl.result', '=', 0);
    })
    ->groupBy('rr.TrxDate',
        'hdr.rr_no',
        'hdr.inspected_at',
        'hdr.qcir_no',
        'hdr.item_code',
        'item.ItemDesc',
        'hdr.supplier_code',
        'con.ContactName',
        'hdr.reject_reason',
        'hdr.cancel_reason',
        DB::raw('(CASE WHEN hdr.qc_status="A" THEN "Passed" 
            WHEN hdr.qc_status="CA" THEN "Conditionally Approved"
            WHEN hdr.qc_status="R" THEN "Rejected"
            WHEN hdr.qc_status="C" THEN "Cancelled"
            ELSE "N/A"
        END)'))
    ->orderBy('hdr.created_at', 'Desc');
  

Заранее благодарю вас.

Комментарии:

1. Я думаю, будет легче найти ответ, если вы также поделитесь своей ошибкой.

2. @Vuong Это просто внутренняя ошибка сервера при вызове API

3. У Laravel есть журнал ошибок самого по себе. Внутренняя ошибка сервера — это ошибка веб-сервера. Сначала вы должны разобраться в журнале ошибок кода.

Ответ №1:

Я просто превратил псевдоним в 1 слово из Failed Parameters в Failed_Parameters, и ошибка исчезла. Я действительно не знаю почему, потому что в других полях псевдоним, содержащий более 1 слова, в порядке, но в части GROUP_CONCAT выдается ошибка.

Если кто-то может объяснить это, пожалуйста, сделайте, это будет большим подспорьем.