ldc-legaulois/app/Models/Articles.php
2021-09-16 12:04:12 +02:00

86 lines
2.1 KiB
PHP

<?php
namespace App\Models;
use App\Enums\ArticleCategory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Cache;
use Kwaadpepper\Enum\Traits\CastsEnums;
class Articles extends Model
{
use CastsEnums;
protected $enumCasts = [
'type' => ArticleCategory::class
];
protected $fillable = [
'title',
'slug',
'content',
'type',
'question',
'multiple_response',
'stop_poll',
'status'
];
protected static function booted()
{
static::creating(function ($article) {
$article->content = clean($article->content);
});
static::updating(function ($article) {
$article->content = clean($article->content);
});
// phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass
static::updated(function ($article) {
Cache::delete('ArticlesGlobal');
});
// phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass
static::deleted(function ($article) {
Cache::delete('ArticlesGlobal');
});
}
public function getRouteKeyName()
{
return 'slug';
}
public function recipes()
{
return $this->belongsToMany(Recipes::class);
}
public function answers()
{
return $this->hasMany(SurveysAnswers::class, 'article_id');
}
public function notifiable()
{
return $this->morphOne(Notifications::class, 'notifiable');
}
/**
* Get cached actus
*
* @return \App\Models\Articles
*/
public static function getCachedArticles()
{
if (!Cache::has('ArticlesGlobal')) {
self::setCachedArticles();
}
return Cache::get('ArticlesGlobal');
}
protected static function setCachedArticles()
{
$actus = Articles::where([['status', true], ['type', ArticleCategory::actu()]])
->orderBy('updated_at', 'DESC')->limit(3)->get();
Cache::put('ArticlesGlobal', $actus);
}
}