framework->getAdapter(SurveyConditionModel::class); $model = $adapter->findByPk($id); return $model instanceof SurveyConditionModel ? $model : null; } public function findMatchingCondition(int $surveyId, int $sourceQuestionId, string $answerValue): ?SurveyConditionModel { $id = $this->connection->fetchOne( 'SELECT id FROM tl_survey_condition WHERE pid = ? AND sourceQuestion = ? AND LOWER(TRIM(answerValue)) = LOWER(TRIM(?)) ORDER BY id ASC LIMIT 1', [$surveyId, $sourceQuestionId, $answerValue], ); return false === $id ? null : $this->findById((int) $id); } /** * @return list> */ public function findOverviewBySurvey(int $surveyId): array { return $this->connection->fetchAllAssociative( <<<'SQL' SELECT c.id, c.answerValue, c.sourceQuestion, c.targetQuestion, source.question AS sourceQuestionLabel, target.question AS targetQuestionLabel FROM tl_survey_condition c LEFT JOIN tl_survey_content source ON source.id = c.sourceQuestion LEFT JOIN tl_survey_content target ON target.id = c.targetQuestion WHERE c.pid = :survey ORDER BY source.sorting ASC, c.id ASC SQL, ['survey' => $surveyId], ); } public function create(int $surveyId, array $data): SurveyConditionModel { $this->connection->insert('tl_survey_condition', [ 'pid' => $surveyId, 'tstamp' => time(), 'sourceQuestion' => (int) ($data['sourceQuestion'] ?? 0), 'answerValue' => mb_strtolower(trim((string) ($data['answerValue'] ?? ''))), 'targetQuestion' => (int) ($data['targetQuestion'] ?? 0), ]); $id = (int) $this->connection->lastInsertId(); return $this->findById($id) ?? throw new \RuntimeException('Bedingung konnte nicht angelegt werden.'); } public function delete(int $surveyId, int $conditionId): void { $this->connection->delete('tl_survey_condition', [ 'id' => $conditionId, 'pid' => $surveyId, ]); } }