Files

61 lines
1.3 KiB
PHP
Raw Permalink Normal View History

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Support\Facades\Storage;
class Post extends Model
{
use HasFactory;
protected $fillable = [
'title',
'slug',
'excerpt',
'body',
'cover_image',
'author_id',
'published_at',
];
protected $casts = [
'published_at' => 'datetime',
];
public function getRouteKeyName(): string
{
return 'slug';
}
public function author(): BelongsTo
{
return $this->belongsTo(User::class, 'author_id');
}
public function scopePublished(Builder $query): Builder
{
return $query->whereNotNull('published_at')->where('published_at', '<=', now());
}
public function getIsPublishedAttribute(): bool
{
return $this->published_at !== null && $this->published_at->lte(now());
}
public function getCoverUrlAttribute(): ?string
{
$cover = (string) ($this->attributes['cover_image'] ?? '');
if ($cover === '') {
return null;
}
if (preg_match('/^https?:\/\//i', $cover)) {
return $cover;
}
return Storage::url($cover);
}
}