/** * Добавляет простое выражение в текущую группу выражений * @param string $leftCond * @param string $operator * @param string $rightCond * @throws RuntimeException если не удалось добавить выражение * @return $this */ public function expr($leftCond, $operator, $rightCond) { if (!$this->currentExpressionGroup) { throw new RuntimeException($this->translate('Cannot add expression. Expression group is not started.')); } $this->currentExpressionGroup->addExpression($leftCond, $operator, $rightCond); return $this; }
/** * Строит запрос для группы выражений * @param IExpressionGroup $exprGroup * @return string */ private function buildExpressionGroup(IExpressionGroup $exprGroup) { $result = []; foreach ($exprGroup->getExpressions() as $expression) { list($leftCond, $operator, $rightCond) = $expression; $leftCond = $this->protectExpressionValue($leftCond); $rightCond = $this->protectExpressionValue($rightCond); $result[] = $leftCond . ' ' . $operator . ' ' . $rightCond; } foreach ($exprGroup->getGroups() as $subGroup) { $result[] = '(' . $this->buildExpressionGroup($subGroup) . ')'; } if (!count($result)) { return '1'; // WHERE 1, if no expressions } return implode(' ' . $exprGroup->getMode() . ' ', $result); }