getChangeDay(); $b = $this->getLastChangeDay($uid); $c = ($a - $b); if($a === 0) { return -1; }else if($c > 0) { // 남은 기간 return $c; }else if($c < 0) { // 지난 기간 return $c; } } /** * 마지막 이메일 변경 일 */ public function getLastChangeDay(int $uid): int { return (collect(DB::select( 'SELECT TIMESTAMPDIFF(DAY, created_at, NOW()) AS diff FROM tb_user_email_log WHERE user_id = ? ORDER BY id DESC LIMIT 1' , [$uid]))->get(0)->diff ?? 0); } /** * 이메일 변경이 가능한지 확인 */ public function isUpdateAble(int $uid): bool { $lastChangeDay = $this->getLastChangeDay($uid); if(!$lastChangeDay || $this->getChangeDay() <= $lastChangeDay) { return true; } return false; } /** * 이메일 변경 기록 입력 */ public function setLog(User $user, string $email): bool { return $this->insert([ 'user_id' => $user->id, 'before' => $user->email, 'after' => $email, 'created_at' => now() ]); } /** * 이메일 변경 기록 조회 */ public function data(SearchData $params): object { $query = $this->query(); $query->select('users.sid', 'tb_user_email_log.*'); if ($params->keyword) { switch ($params->field) { case 'tb_user_email_log.before' : case 'tb_user_email_log.after' : case 'users.name' : case 'users.email' : $query->where($params->field, 'LIKE', "%{$params->keyword}%"); break; case 'tb_user_email_log.id' : case 'users.id' : case 'users.sid' : $query->where($params->field, '=', $params->keyword); break; } } $query->leftJoin('users', 'users.id', '=', 'tb_user_email_log.user_id'); $query->orderByDesc('tb_user_email_log.created_at'); $list = $query->paginate($params->perPage, ['*'], 'page', $params->page); $total = $this->count(); $rows = $list->count(); return (object)[ 'total' => $total, 'rows' => $rows, 'list' => $list ]; } }