Banner.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Model;
  4. use App\Models\DTO\SearchData;
  5. class Banner extends Model
  6. {
  7. protected $table = 'tb_banner';
  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. public function bannerGroup()
  20. {
  21. return $this->belongsTo(BannerGroup::class)->withDefault();
  22. }
  23. /**
  24. * 배너 조회
  25. */
  26. public function data(SearchData $params): object
  27. {
  28. $query = $this->query();
  29. $query->select('tb_banner.*');
  30. if ($params->keyword) {
  31. switch ($params->field) {
  32. case 'tb_banner.subject' :
  33. case 'tb_banner.url' :
  34. case 'users.name' :
  35. case 'users.email' :
  36. $query->where($params->field, 'LIKE', "%{$params->keyword}%");
  37. break;
  38. case 'tb_banner.id' :
  39. case 'users.id' :
  40. case 'users.sid' :
  41. $query->where($params->field, '=', $params->keyword);
  42. break;
  43. }
  44. }
  45. if ($params->activated != '') {
  46. $query->where('activated', '=', $params->activated);
  47. }
  48. $query->join('tb_banner_group', 'tb_banner_group.id', '=', 'tb_banner.banner_group_id');
  49. $query->leftJoin('users', 'users.id', '=', 'tb_banner.user_id');
  50. $query->orderByDesc('tb_banner.created_at');
  51. $list = $query->paginate($params->perPage, ['*'], 'page', $params->page);
  52. $total = $this->count();
  53. $rows = $list->count();
  54. return (object)[
  55. 'total' => $total,
  56. 'rows' => $rows,
  57. 'list' => $list
  58. ];
  59. }
  60. /**
  61. * 표시할 배너 조회
  62. */
  63. public function list()
  64. {
  65. $today = now()->format('Y-m-d');
  66. $query = $this->query();
  67. $query->select('*');
  68. $query->where('start_date', '<=', $today);
  69. $query->where('end_date', '>=', $today);
  70. $query->where('activated', 1);
  71. $query->orderBy('order');
  72. $query->orderByDesc('created_at');
  73. return $query->get();
  74. }
  75. }