select([ 'seq','gubun','TID','res_code','mem_no','info','rgdate', // ✅ MariaDB: CAST(... AS JSON) 금지 → info에 바로 JSON_EXTRACT DB::raw("JSON_UNQUOTE(JSON_EXTRACT(`info`, '$.mobile_number')) AS mobile_number"), DB::raw("JSON_UNQUOTE(JSON_EXTRACT(`info`, '$._mno')) AS info_mno"), ]); // mem_no 검색: 컬럼 mem_no + info._mno 둘 다 $memNo = (string)($filters['mem_no'] ?? ''); if ($memNo !== '') { $q->where(function ($qq) use ($memNo) { $qq->where('mem_no', (int)$memNo) ->orWhereRaw("JSON_UNQUOTE(JSON_EXTRACT(`info`, '$._mno')) = ?", [$memNo]); }); } // phone 검색: 숫자만 받아서 부분검색 $pd = (string)($filters['phone_digits'] ?? ''); if ($pd !== '') { $q->whereRaw( "REPLACE(JSON_UNQUOTE(JSON_EXTRACT(`info`, '$.mobile_number')),'-','') LIKE ?", ['%'.$pd.'%'] ); } $q->orderByDesc('rgdate')->orderByDesc('seq'); return $q->paginate($perPage)->withQueryString(); } }