cacheFor = config('api.servicesDBCache') * 60; self::$editableProperties = [ 'name' => [ 'label' => Str::ucfirst(trans('models.common.name')), 'type' => CrudType::string(), 'validate' => [ 'min:5', 'max:255' ], 'actions' => [ CrudAction::viewAny(), CrudAction::view(), CrudAction::create(), CrudAction::update() ] ] ]; parent::__construct($attributes); } /** * Set the base cache tags that will be present * on all queries. * *! This is used to flush caching * * @return array */ protected function getCacheBaseTags(): array { return [ 'crm_brands', ]; } protected static function booted() { static::created(function () { // flush Eloquent cache self::flushQueryCache(); }); static::updated(function () { // flush Eloquent cache self::flushQueryCache(); }); static::deleted(function () { // flush Eloquent cache self::flushQueryCache(); }); } /** * Service hasMany relation * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function services() { return $this->hasMany(Service::class); } /** * Question hasMany relation * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function questions() { return $this->hasMany(Question::class); } /** * CustomerInfo hasMany relation * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function customerInfos() { return $this->hasMany(CustomerInfo::class); } /** * ServiceStat hasMany relation * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function servicesStats() { return $this->hasMany(ServiceStat::class); } /** * SingleOptin hasMany relation * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function singleOptins() { return $this->hasMany(SingleOptin::class); } public function getAccountsAttribute() { return $this->customerInfos()->count(); } public function getTotalOptinsAttribute() { return $this->customerInfos()->where('opt_in', 1)->count() + $this->singleOptins()->count(); } }