giftcon_dev/app/Repositories/Admin/Log/MemberDanalAuthTelLogRepository.php
2026-03-03 15:13:16 +09:00

44 lines
1.5 KiB
PHP

<?php
namespace App\Repositories\Admin\Log;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Facades\DB;
final class MemberDanalAuthTelLogRepository
{
private const TABLE = 'mem_danalauthtel_log';
public function paginate(array $filters, int $perPage = 30): LengthAwarePaginator
{
$q = DB::table(self::TABLE)->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();
}
}