#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 выдается ошибка.
Если кто-то может объяснить это, пожалуйста, сделайте, это будет большим подспорьем.