Popup.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Model;
  4. use App\Models\DTO\SearchData;
  5. class Popup extends Model
  6. {
  7. protected $table = 'tb_popup';
  8. protected $primaryKey = 'id';
  9. public $keyType = 'int';
  10. public $incrementing = true;
  11. public $timestamps = true;
  12. const CREATED_AT = 'created_at';
  13. const UPDATED_AT = 'updated_at';
  14. protected $guarded = [];
  15. public function user()
  16. {
  17. return $this->belongsTo(User::class)->withDefault();
  18. }
  19. /**
  20. * 팝업 조회
  21. */
  22. public function data(SearchData $params): object
  23. {
  24. $query = $this->query();
  25. $query->select('tb_popup.*');
  26. if($params->keyword) {
  27. switch ($params->field) {
  28. case 'tb_popup.subject' :
  29. case 'tb_popup.content' :
  30. case 'users.name' :
  31. case 'users.email' :
  32. $query->where($params->field, 'LIKE', "%{$params->keyword}%");
  33. break;
  34. case 'tb_popup.id' :
  35. case 'users.id' :
  36. case 'users.sid' :
  37. $query->where($params->field, $params->keyword);
  38. break;
  39. }
  40. }
  41. if($params->activated != null) {
  42. $query->where('activated', $params->activated);
  43. }
  44. $query->leftJoin('users', 'users.id', '=', 'tb_popup.user_id');
  45. $query->orderByDesc('tb_popup.id');
  46. $list = $query->paginate($params->perPage, ['*'], 'page', $params->page);
  47. $total = $this->count();
  48. $rows = $list->count();
  49. return (object)[
  50. 'total' => $total,
  51. 'rows' => $rows,
  52. 'list' => $list
  53. ];
  54. }
  55. /**
  56. * 표시할 팝업 조회
  57. */
  58. public function list()
  59. {
  60. $today = now()->format('Y-m-d');
  61. $query = $this->query();
  62. $query->select('*');
  63. $query->where('start_date', '<=', $today);
  64. $query->where('end_date', '>=', $today);
  65. $query->where('activated', '=', 1);
  66. $query->orderByDesc('created_at');
  67. return $query->get();
  68. }
  69. }