44 lines
1.5 KiB
PHP
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();
|
|
}
|
|
}
|