$targetService=$abstract; }else{ $this->$targetService=app($abstract); } return $targetService; } /** * 缓存过了 * @param array $kvPairs * @return Collection|null */ function get(array $kvPairs):?Collection{ return Cache::remember($this->cachingKey($kvPairs), config('cache.expirations.serviceAutoCache'), function ()use($kvPairs) { $query = ($this->modelClass)::query(); foreach ($kvPairs as $column => $value){ if (is_array($value))$query->whereIn($column,$value); else $query->where($column,$value); } return $query->get(); }); } protected function cachingKey(array $kvPairs): string { ksort($kvPairs); return 'MaterialBox_'.md5(json_encode($kvPairs)); } protected function clearCache(array $kvPairs){ Cache::forget($this->cachingKey($kvPairs)); } function create(array $kvPairs){ $materialBox=$this->get($kvPairs); if($materialBox->isNotEmpty()) return $materialBox->first(); $this->clearCache($kvPairs); return ($this->modelClass)::query()->create($kvPairs); } function firstOrCreate(array $kvPairs){ $materialBox=$this->get($kvPairs); if($materialBox->isNotEmpty()) return $materialBox->first(); $this->clearCache($kvPairs); return $this->create($kvPairs); } }