SmsHistory.php 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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 SmsHistory extends Model
  7. {
  8. protected $table = 'tb_sms_history';
  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 = null;
  15. const DELETED_AT = null;
  16. protected $guarded = [];
  17. /**
  18. * 전송내역 조회
  19. */
  20. public function data(SearchData $params): object
  21. {
  22. $query = $this->query();
  23. $query->select(
  24. 'tb_sms_history.*',
  25. 'users.sid',
  26. 'users.name',
  27. 'users.nickname',
  28. 'users.email'
  29. );
  30. if ($params->keyword) {
  31. switch ($params->field) {
  32. case 'tb_sms_history.id' :
  33. case 'users.id':
  34. case 'users.sid':
  35. $query->where($params->field, '=', $params->keyword);
  36. break;
  37. case 'users.name':
  38. case 'users.nickname':
  39. case 'users.email':
  40. case 'tb_sms_history.subject':
  41. case 'tb_sms_history.content':
  42. case 'tb_sms_history.tel':
  43. $query->where($params->field, 'LIKE', "%{$params->keyword}%");
  44. break;
  45. case 'users.created_at':
  46. case 'users.last_login_at':
  47. $query->whereDate($params->field, $params->keyword);
  48. break;
  49. }
  50. }
  51. if($params->startDate || $params->endDate) {
  52. if($params->startDate) {
  53. $query->where('created_at', '>=', $params->startDate . ' 00:00:00');
  54. }
  55. if($params->endDate) {
  56. $query->where('created_at', '<=', $params->endDate . ' 23:59:59');
  57. }
  58. }
  59. $query->leftJoin('users', 'users.id', '=', 'tb_sms_history.user_id');
  60. $query->orderByDesc('tb_sms_history.id');
  61. $list = $query->paginate($params->perPage, ['*'], 'page', $params->page);
  62. $total = $this->count();
  63. $rows = $list->count();
  64. return (object)[
  65. 'total' => $total,
  66. 'rows' => $rows,
  67. 'list' => $list
  68. ];
  69. }
  70. /**
  71. * 전송 내역 key 조회
  72. */
  73. public function setHistory(array $data): mixed
  74. {
  75. return DB::transaction(function () use ($data)
  76. {
  77. DB::table($this->table)->insert($data);
  78. $keys = DB::select('SELECT LAST_INSERT_ID() AS id');
  79. $sk = $keys[0]->id;
  80. $ek = ($sk + count($data) - 1);
  81. return range($sk, $ek);
  82. });
  83. }
  84. }