*/ protected $fillable = [ 'label', 'content', 'brand_id', ]; /** * Perform any actions required after the model boots. * * @return void */ protected static function booted(): void { static::created(function () { self::resetCache(); }); static::updated(function () { self::resetCache(); }); static::deleted(function () { self::resetCache(); }); } // * METHODS /** * Get all templates associated to the band. * * @param integer $brandModelKey * @return \Illuminate\Database\Eloquent\Collection */ public static function getAllModelsFromBrand(int $brandModelKey): \Illuminate\Database\Eloquent\Collection { return self::getTemplates()->filter( fn($model) => $model->brand->getKey() === $brandModelKey )->values(); } /** * Reset all cache elements related to this model. * * @return void */ private static function resetCache(): void { Cache::forget('templates'); self::getTemplates(); } /** * Get all templates. * * @return \Illuminate\Database\Eloquent\Collection */ public static function getTemplates(): \Illuminate\Database\Eloquent\Collection { return Cache::remember('templates', 86400, function () { return self::query()->orderBy('label', 'ASC')->get(); }); } // * RELATIONS /** * Brand belongs to relation. * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function brand(): \Illuminate\Database\Eloquent\Relations\BelongsTo { return $this->belongsTo(Brand::class); } }