orderBy("sequence")->select($column)->get(); } /** * 设置/刷新 单位缓存 */ public function setUnitCache() { $units = Unit::query()->get(); Cache::forever("units",$units); } /** * 获取单位缓存 * * @return mixed */ public function getUnitCache() { if (!Cache::has("units")){ $units = Unit::query()->get(); Cache::forever("units",$units); } return Cache::get("units"); } /** * 获取单位集的映射 * * @param null|array $targets * @param bool $notExistToCreate * * @return array */ public function getUnitMapping(?array $targets = null, bool $notExistToCreate = false):array { $key = "unitMapping:".json_encode($targets,JSON_UNESCAPED_UNICODE); $units = Cache::remember($key,config("cache.expirations.rarelyChange"),function ()use($targets){ $result = []; $units = $this->getUnitCache(); if (!$units)return []; foreach ($units as $unit){ if (!$targets)$result[$unit->id] = $unit->name; else if (array_search($unit->name,$targets)!==false)$result[$unit->id] = $unit->name; } return $result; }); if ($notExistToCreate && $targets && count($units)!=count($targets)){ $flip = array_flip($targets); foreach ($units as $key=>$val)unset($flip[$val]); foreach ($flip as $key=>$val)Unit::query()->firstOrCreate(["name"=>$key]); Cache::pull($key); return $this->getUnitMapping($targets); } return $units; } /** * 根据名称获取单位 * * @param string|null $name * * @return Model|\stdClass|null */ public function getUnit(?string $name = null):?Unit { if (!$name)$name = "件"; return Unit::query()->where("name",$name)->firstOrCreate(["name"=>$name]); } }