encodeJsonOrNull($beforeSnapshot), $this->encodeJsonOrNull($afterSnapshot), $this->encodeJsonOrNull($diff), ] ); } public function listByTask(int $taskId, int $limit = 100): array { $limit = max(1, min(1000, $limit)); return TaskCertDb::fetchAll( 'SELECT * FROM task_change_log WHERE task_id = ? ORDER BY id DESC LIMIT ' . $limit, 'i', [$taskId] ); } private function encodeJsonOrNull(?array $value): ?string { if ($value === null) { return null; } return json_encode($value, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); } }