[标签 => 是/否] */ public function map(int $companyId): array { return Cache::remember($this->key($companyId), now()->addHours(self::TTL_HOURS), function () use ($companyId): array { try { if (! Schema::hasTable('jst_order_label_planting_rules')) { return []; } // 直接用表查询:避开基类的软删除/公司作用域与模型缓存,映射表由命令写入后立即失效重读 $map = []; foreach (DB::table('jst_order_label_planting_rules') ->where('company_id', $companyId) ->get(['label', 'is_planting']) as $row) { $label = trim((string) $row->label); if ($label === '') { continue; } $map[$label] = trim((string) $row->is_planting) === '否' ? '否' : '是'; } return $map; } catch (Throwable) { return []; } }); } /** 单个标签的判断结果:命中映射表取映射值(默认是),未命中为否。 */ public function flag(int $companyId, ?string $label): string { $key = trim((string) $label); if ($key === '') { return '否'; } return $this->map($companyId)[$key] ?? '否'; } public function forget(int $companyId): void { Cache::forget($this->key($companyId)); } private function key(int $companyId): string { return "jst-order-labels:planting-rules:v1:{$companyId}"; } }