'bool', 'data' => 'encrypted:object' ]; /** * Map attribute names to enum classes. * * @var array */ protected $enumCasts = [ 'mode' => PaymentModeEnum::class ]; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'status', 'data', ]; /** * Perform any actions required after the model boots. * * @return void */ protected static function booted() { // * EVENT CLOSURES. static::creating(function (self $model) { throw new \RuntimeException("Creating {$model->mode} is not allowed", 1); }); static::updated(function (self $model) { Cache::delete('PaymentModesGlobal'); self::flashStatus($model, true); }); static::deleting(function (self $model) { throw new \RuntimeException("Deleting {$model->mode} is not allowed", 1); }); } // * METHODS /** * Query available delivery Methods * * @return \Illuminate\Database\Eloquent\Builder */ public static function availables(): Builder { return self::where('status', true); } // * - Cache /** * Get all available payment modes from cache. * If cache was reset, it will fetch them from DB. * * @return \Illuminate\Database\Eloquent\Collection */ public static function getCachedPaymentModes() { if (!Cache::has('PaymentModesGlobal')) { self::setCachedPaymentModes(); } return Cache::get('PaymentModesGlobal'); } /** * Put all available payment modes into cache. * * @return void */ protected static function setCachedPaymentModes(): void { Cache::put('PaymentModesGlobal', self::all()); } }