File: //home/armgroup/libs/app/Models/Article.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Spatie\Activitylog\LogOptions;
use Spatie\Activitylog\Traits\LogsActivity;
class Article extends Model
{
use HasFactory, LogsActivity;
protected $guarded = ['id'];
protected $casts = [
'faq' => 'array',
];
public function getActivitylogOptions(): LogOptions
{
return LogOptions::defaults()
->logUnguarded()
->setDescriptionForEvent(fn (string $eventName) => "بلاگ ({$this->title}) ".eventNameTranslate($eventName));
}
public function getRouteKeyName()
{
return 'slug';
}
public function user()
{
return $this->belongsTo(User::class)->withDefault();
}
public function categories()
{
return $this->morphToMany(Category::class, 'categorizable');
}
public function comments()
{
return $this->morphMany(Comment::class, 'commentable');
}
public function favorites()
{
return $this->morphMany(Favorite::class, 'favoritable');
}
public function scores()
{
return $this->morphMany(Score::class, 'scorable');
}
public function getThumbImageAttribute($value)
{
return $this->image ?: 'images/defaults/default.jpg';
}
public function getUrlAttribute()
{
return route('articles.show', $this->slug);
}
public function productCategories()
{
return $this->belongsToMany(Category::class, 'article_category', 'article_id', 'category_id');
}
public function getResized300200ImageAttribute()
{
if (! file_exists(public_path('resized-images/articles/300-200/'.basename($this->image)))) {
$img = \Intervention\Image\Facades\Image::make($this->image)->resize(300, 200);
$img->save(public_path('resized-images/articles/300-200/'.basename($this->image)), 85);
}
return 'resized-images/articles/300-200/'.basename($this->image);
}
}