$id > 0); if (!$tenantIds) { return []; } $placeholders = implode(',', array_fill(0, count($tenantIds), '?')); $rows = DB::select( 'select department_id from tenant_departments where tenant_id in (' . $placeholders . ')', ...array_map('strval', $tenantIds) ); if (!is_array($rows)) { return []; } $ids = []; foreach ($rows as $row) { $data = $row['tenant_departments'] ?? $row; if (is_array($data) && isset($data['department_id'])) { $ids[] = (int) $data['department_id']; } } return array_values(array_unique($ids)); } public static function listDepartmentMapByTenantIds(array $tenantIds): array { $tenantIds = array_values(array_unique(array_map('intval', $tenantIds))); $tenantIds = array_filter($tenantIds, static fn ($id) => $id > 0); if (!$tenantIds) { return []; } $placeholders = implode(',', array_fill(0, count($tenantIds), '?')); $rows = DB::select( 'select tenant_id, department_id from tenant_departments where tenant_id in (' . $placeholders . ')', ...array_map('strval', $tenantIds) ); if (!is_array($rows)) { return []; } $map = []; foreach ($rows as $row) { $data = $row['tenant_departments'] ?? $row; if (is_array($data) && isset($data['tenant_id'], $data['department_id'])) { $tenantId = (int) $data['tenant_id']; $departmentId = (int) $data['department_id']; if ($tenantId > 0 && $departmentId > 0) { $map[$tenantId] ??= []; $map[$tenantId][] = $departmentId; } } } foreach ($map as $tenantId => $items) { $map[$tenantId] = array_values(array_unique($items)); } return $map; } public static function replaceForDepartment(int $departmentId, array $tenantIds): bool { DB::delete('delete from tenant_departments where department_id = ?', (string) $departmentId); $tenantIds = array_values(array_unique(array_map('intval', $tenantIds))); $tenantIds = array_filter($tenantIds, static fn ($id) => $id > 0); if (!$tenantIds) { return true; } foreach ($tenantIds as $tenantId) { DB::insert( 'insert into tenant_departments (tenant_id, department_id, created) values (?,?,NOW())', (string) $tenantId, (string) $departmentId ); } return true; } }