UserGrade.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Model;
  4. use Illuminate\Support\Facades\DB;
  5. use App\Models\DTO\SearchData;
  6. class UserGrade extends Model
  7. {
  8. protected $table = 'tb_user_grade';
  9. protected $primaryKey = 'id';
  10. public $keyType = 'int';
  11. public $incrementing = true;
  12. public $timestamps = true;
  13. const CREATED_AT = 'created_at';
  14. const UPDATED_AT = 'updated_at';
  15. protected $guarded = [];
  16. public function user()
  17. {
  18. return $this->hasMany(User::class);
  19. }
  20. /**
  21. * 회원등급 조회
  22. */
  23. public function data(SearchData $params): object
  24. {
  25. $query = $this->query();
  26. $query->select('tb_user_grade.*');
  27. $query->orderBy('sort');
  28. $list = $query->paginate($params->perPage, ['*'], 'page', $params->page);
  29. $total = $this->count();
  30. $rows = $list->count();
  31. return (object)[
  32. 'total' => $total,
  33. 'rows' => $rows,
  34. 'list' => $list
  35. ];
  36. }
  37. /**
  38. * 전체 사용 회원등급 조회
  39. */
  40. public function getAllGrade()
  41. {
  42. return $this->where('is_use', 1)->orderBy('sort', 'ASC')->get();
  43. }
  44. /**
  45. * 회원등급 조회하여 배열로 반환
  46. */
  47. public function findUserGrade(int $userGradeID)
  48. {
  49. return $this->where('id', $userGradeID)->where('is_use', 1)->orderBy('sort', 'ASC')->get();
  50. }
  51. /**
  52. * 회원 등급 정보 조회
  53. */
  54. public function findByUserID(?int $userID)
  55. {
  56. $sql = "
  57. SELECT
  58. UGD.*
  59. FROM tb_user_grade UGD
  60. JOIN users USR ON UGD.id = USR.user_grade_id
  61. WHERE USR.id = ? AND UGD.is_use = 1 LIMIT 1;
  62. ";
  63. return DB::selectOne($sql, [$userID]);
  64. }
  65. }