UserLog.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. namespace App\Module\Game\Models;
  3. use UCore\ModelCore;
  4. /**
  5. * 用户日志模型
  6. *
  7. * field start
  8. * @property int $id 主键ID
  9. * @property int $user_id 用户ID
  10. * @property string $message 日志消息内容
  11. * @property string $source_type 来源类型(fund, item, farm等)
  12. * @property int $source_id 来源记录ID
  13. * @property string $source_table 来源表名
  14. * @property \Carbon\Carbon $created_at 创建时间
  15. * field end
  16. */
  17. class UserLog extends ModelCore
  18. {
  19. /**
  20. * 与模型关联的表名
  21. *
  22. * @var string
  23. */
  24. protected $table = 'user_logs';
  25. /**
  26. * 指示模型是否应该被打上时间戳
  27. * 只需要创建时间,不需要更新时间
  28. *
  29. * @var bool
  30. */
  31. public $timestamps = true;
  32. /**
  33. * 更新时间戳字段名
  34. * 设置为null表示不使用updated_at字段
  35. *
  36. * @var string|null
  37. */
  38. const UPDATED_AT = null;
  39. // attrlist start
  40. protected $fillable = [
  41. 'id',
  42. 'user_id',
  43. 'message',
  44. 'source_type',
  45. 'source_id',
  46. 'source_table',
  47. ];
  48. // attrlist end
  49. /**
  50. * 应该被转换为日期的属性
  51. *
  52. * @var array
  53. */
  54. protected $dates = [
  55. 'created_at',
  56. ];
  57. /**
  58. * 应该被转换为原生类型的属性
  59. *
  60. * @var array
  61. */
  62. protected $casts = [
  63. 'user_id' => 'integer',
  64. 'source_id' => 'integer',
  65. 'created_at' => 'datetime',
  66. ];
  67. /**
  68. * 关联用户模型
  69. *
  70. * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
  71. */
  72. public function user()
  73. {
  74. return $this->belongsTo(\App\Module\User\Models\User::class, 'user_id', 'id');
  75. }
  76. /**
  77. * 按用户ID查询日志
  78. *
  79. * @param \Illuminate\Database\Eloquent\Builder $query
  80. * @param int $userId
  81. * @return \Illuminate\Database\Eloquent\Builder
  82. */
  83. public function scopeByUser($query, int $userId)
  84. {
  85. return $query->where('user_id', $userId);
  86. }
  87. /**
  88. * 按来源类型查询日志
  89. *
  90. * @param \Illuminate\Database\Eloquent\Builder $query
  91. * @param string $sourceType
  92. * @return \Illuminate\Database\Eloquent\Builder
  93. */
  94. public function scopeBySourceType($query, string $sourceType)
  95. {
  96. return $query->where('source_type', $sourceType);
  97. }
  98. /**
  99. * 按时间范围查询日志
  100. *
  101. * @param \Illuminate\Database\Eloquent\Builder $query
  102. * @param string $startTime
  103. * @param string $endTime
  104. * @return \Illuminate\Database\Eloquent\Builder
  105. */
  106. public function scopeByTimeRange($query, string $startTime, string $endTime)
  107. {
  108. return $query->whereBetween('created_at', [$startTime, $endTime]);
  109. }
  110. /**
  111. * 最新日志优先
  112. *
  113. * @param \Illuminate\Database\Eloquent\Builder $query
  114. * @return \Illuminate\Database\Eloquent\Builder
  115. */
  116. public function scopeLatest($query)
  117. {
  118. return $query->orderBy('created_at', 'desc');
  119. }
  120. /**
  121. * 获取格式化的创建时间
  122. *
  123. * @return string
  124. */
  125. public function getFormattedCreatedAtAttribute(): string
  126. {
  127. return $this->created_at ? $this->created_at->format('Y-m-d H:i:s') : '';
  128. }
  129. /**
  130. * 获取格式化的时间戳
  131. *
  132. * @return string
  133. */
  134. public function getTimeAttribute(): string
  135. {
  136. return $this->created_at ? $this->created_at->format('m-d H:i') : '';
  137. }
  138. }