Я пытаюсь использовать массив php в качестве параметра хранимой процедуры в моем приложении Symfony.
Но я не могу найти ничего такого в учении.
У меня есть хранимая процедура в моей базе данных postgresql, принимающая в качестве параметров два массива:
CREATE OR REPLACE FUNCTION myschema."deleteHashes" (
additions text [],
deletions integer []
)
Очень просто вызвать его в SQL-запросе, например:
select "deleteHashes"(ARRAY['foo', 'bar'], ARRAY[1, 2, 3]);
Использование констант PARAM_STR_ARRAY
и PARAM_INT_ARRAY
в доктрине при построении запроса разбивает массивы, и это не то, что мне нужно:
$sql = 'select "deleteHashes"(:additions , :deletions)';
$this->getEntityManager()->getConnection()->executeQuery(
$sql,
[
'additions' => $additions,
'deletions' => $deletions,
],
[
'additions' => Connection::PARAM_STR_ARRAY,
'deletions' => Connection::PARAM_INT_ARRAY,
]
);
У меня есть рабочее решение, если я генерирую полную строку SQL в php:
$sql = 'select "deleteHashes"('.
$this->arrayToSql($additions, self::STR).', '.
$this->arrayToSql($deletions, self::INT).")";
private function arrayToSql($stringArray, $type)
{
$returnString = 'ARRAY[';
if ($type === self::STR) {
$stringArray = array_map(function ($data) {
return "'".$data."'";
}, $stringArray);
}
$returnString = $returnString . implode(', ', $stringArray);
return $returnString.']';
}
Работает нормально, но, на мой взгляд, не очень элегантно.
Как я могу отправить свой массив в доктрину хранимых процедур?