$id > 0)); if (!$departmentIds) { return []; } $placeholders = implode(',', array_fill(0, count($departmentIds), '?')); $joinUsersSql = $activeOnly ? ' join users u on u.id = ud.user_id and u.active = 1' : ''; $rows = DB::select( 'select ud.department_id, count(distinct ud.user_id) as user_count from user_departments ud' . $joinUsersSql . ' where ud.department_id in (' . $placeholders . ') group by ud.department_id', ...array_map('strval', $departmentIds) ); if (!is_array($rows)) { return []; } $result = []; foreach ($rows as $row) { $departmentId = self::extractIntField($row, 'department_id'); if ($departmentId <= 0) { continue; } $result[$departmentId] = self::extractIntField($row, 'user_count'); } return $result; } private static function extractIntField(array $row, string $field): int { foreach ($row as $value) { if (!is_array($value)) { continue; } if (array_key_exists($field, $value)) { return (int) $value[$field]; } } if (array_key_exists($field, $row)) { return (int) $row[$field]; } return 0; } }