Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 15 additions & 2 deletions Parser.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,17 @@
* --*names AND t.name IN (:@names)
* =>
* AND t.name IN (:names_1, :names_2, :names_3, ...)
*
* Изначально рассчитано, что параметры могут приходить в следующем виде:
* [':p1'=>'v1', ':p2' => ['value', 'PDO_SQL_TYPE'], ':p3' => ['value', 'bind'=>'text'], ':p4' => [['v1', 'v2', ...]]]
* Второй способ никогда не видел, может в очень ранних проектах.
* Третий способ тоже сомнительный, обычно пишут: ':p3' => ['bind' => 'text', 'value' => $value] - позиционно определять
* параметры не лучший способ, правильнее задавать явно.
* Четвертый способ тоже несколько странный и не соответствует способу для первого Yii - там просто указывали массив (не
* вложенный).
* Кроме того есть еще дополнительный тип биндинга - "tuple", не нашел в наших проектах его использования.
* Ввиду 2-го и 3-го способов не получится уже реализовать простой способ указания массива, надо постоянно помнить про
* вложенность.
*/
class Parser
{
Expand Down Expand Up @@ -69,7 +80,8 @@ public function getSimplifiedParams()
}

/**
* Конвертирует параметры запроса из расширенного формата в параметры пригодные для \yii\db\Command::bindValues.
* Конвертирует параметры запроса из расширенного формата в параметры пригодные для \yii\db\Command::bindValues().
* public function bindParam($name, &$value, $dataType = null, $length = null, $driverOptions = null)
* @param array $params Параметры построения запроса.
* @return array
*/
Expand Down Expand Up @@ -126,6 +138,7 @@ private function simplifyParams(array $params)
$newParams[$key] = $value;
}
}

return $newParams;
}

Expand Down Expand Up @@ -221,7 +234,7 @@ private function replaceComment($comment, $queryInComment, $paramName, $replaceN
}
} elseif (is_array($paramValue)) {
/**
* Значение параметра - это массив, но почему-то без элемента "bind".
* Значение параметра - это массив, но без элемента "bind".
* Это случай, когда у нас элементы для списка значений IN.
* Там массив значений внутри массива - т.е. первым элементом массива является массив значений
* "связанной" переменной.
Expand Down