1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class ActivityLog extends Model
{
const UPDATED_AT = null; // Activity logs are append-only, no updates
protected $fillable = [
'loggable_id',
'loggable_type',
'event_type',
'ip_address',
'user_agent',
'data',
];
protected $casts = [
'data' => 'array',
'created_at' => 'datetime',
];
// Polymorphic relationship
public function loggable()
{
return $this->morphTo();
}
// Scopes
public function scopeForEvent($query, string $eventType)
{
return $query->where('event_type', $eventType);
}
public function scopeByIp($query, string $ip)
{
return $query->where('ip_address', $ip);
}
public function scopeRecent($query, $hours = 24)
{
return $query->where('created_at', '>=', now()->subHours($hours));
}
}
|