'integer', 'source_id' => 'integer', 'original_time' => 'datetime', 'collected_at' => 'datetime', 'created_at' => 'datetime', ]; /** * 关联用户模型 * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function user() { return $this->belongsTo(\App\Module\User\Models\User::class, 'user_id', 'id'); } /** * 按用户ID查询日志 * * @param \Illuminate\Database\Eloquent\Builder $query * @param int $userId * @return \Illuminate\Database\Eloquent\Builder */ public function scopeByUser($query, int $userId) { return $query->where('user_id', $userId); } /** * 按来源类型查询日志 * * @param \Illuminate\Database\Eloquent\Builder $query * @param string $sourceType * @return \Illuminate\Database\Eloquent\Builder */ public function scopeBySourceType($query, string $sourceType) { return $query->where('source_type', $sourceType); } /** * 按时间范围查询日志 * * @param \Illuminate\Database\Eloquent\Builder $query * @param string $startTime * @param string $endTime * @return \Illuminate\Database\Eloquent\Builder */ public function scopeByTimeRange($query, string $startTime, string $endTime) { return $query->whereBetween('created_at', [$startTime, $endTime]); } /** * 最新日志优先(按原始时间排序) * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ public function scopeLatest($query) { return $query->orderBy('original_time', 'desc'); } /** * 按原始时间排序(升序) * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ public function scopeByOriginalTime($query) { return $query->orderBy('original_time', 'asc'); } /** * 按收集时间排序 * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ public function scopeByCollectedTime($query) { return $query->orderBy('collected_at', 'desc'); } /** * 按原始时间范围查询 * * @param \Illuminate\Database\Eloquent\Builder $query * @param string $startTime * @param string $endTime * @return \Illuminate\Database\Eloquent\Builder */ public function scopeByOriginalTimeRange($query, string $startTime, string $endTime) { return $query->whereBetween('original_time', [$startTime, $endTime]); } /** * 获取格式化的创建时间 * * @return string */ public function getFormattedCreatedAtAttribute(): string { return $this->created_at ? $this->created_at->format('Y-m-d H:i:s') : ''; } /** * 获取格式化的时间戳(使用原始时间) * * @return string */ public function getTimeAttribute(): string { return $this->original_time ? $this->original_time->format('m-d H:i') : ''; } /** * 获取格式化的原始时间 * * @return string */ public function getFormattedOriginalTimeAttribute(): string { return $this->original_time ? $this->original_time->format('Y-m-d H:i:s') : ''; } /** * 获取格式化的收集时间 * * @return string */ public function getFormattedCollectedAtAttribute(): string { return $this->collected_at ? $this->collected_at->format('Y-m-d H:i:s') : ''; } /** * 获取时间差(收集时间 - 原始时间) * * @return int 秒数 */ public function getCollectionDelayAttribute(): int { if (!$this->original_time || !$this->collected_at) { return 0; } return $this->collected_at->timestamp - $this->original_time->timestamp; } }