![enum UserMetric: string
{
case Logins = 'logins';
}
enum MailboxMetric: string
{
case ProcessedEmails = 'processed_emails';
}
trait HasMetrics
{
public function metrics()
{
return $this->morphMany(Metric::class, 'model');
}
public function incrementMetric($name, $value = 1, $month = null, $year = null)
{
$this->metrics()->firstOrCreate([
'name' => $name,
'month' => $month ?? now()->month,
'year' => $year ?? now()->year,
], ['value' => 0])->increment('value', $value);
}
public function decrementMetric($name, $value = 1, $month = null, $year = null)
{
$this->metrics()->where([
'name' => $name,
'month' => $month ?? now()->month,
'year' => $year ?? now()->year,
])->first()?->decrement('value', $value);
}
}](https://pbs.twimg.com/media/GE-xHjnW8AA6fpe.jpg?name=small&format=webp)
ALT enum UserMetric: string { case Logins = 'logins'; } enum MailboxMetric: string { case ProcessedEmails = 'processed_emails'; } trait HasMetrics { public function metrics() { return $this->morphMany(Metric::class, 'model'); } public function incrementMetric($name, $value = 1, $month = null, $year = null) { $this->metrics()->firstOrCreate([ 'name' => $name, 'month' => $month ?? now()->month, 'year' => $year ?? now()->year, ], ['value' => 0])->increment('value', $value); } public function decrementMetric($name, $value = 1, $month = null, $year = null) { $this->metrics()->where([ 'name' => $name, 'month' => $month ?? now()->month, 'year' => $year ?? now()->year, ])->first()?->decrement('value', $value); } }





























