Можете ли вы использовать именованные параметры в Laravel Eloquent
Я использую Oracle в качестве уровня базы данных, но проблема в том, что oracle через OCI8 (я создал драйвер пространства пользователей PDO) поддерживает только именованные параметры в операторах SQL и не поддерживает позиционированные параметры. (Например, с использованием нескольких?)
В основе, это красноречивый Laravel, который генерирует SQL, но я не могу найти никакой документации о том, как переопределить построение параметров.
Я хотел бы иметь возможность создавать именованные параметры в форме ":имя" вместо размещения многочисленные "?" на протяжении всего запроса.
Можно ли это сделать? Я предполагаю, что это как-то связано с классами грамматики базы данных...
1 answers
Ну что ж, если у кого-то есть лучшее решение, отправьте его или, может быть, скажите мне, что может быть не так с моим временным решением. Я заменяю все "?" на ":autoparam" с увеличением параметра, создавая ":autoparam0", ":autoparam1", ":autoparam2" и т. Д.
//Replace ? with a pseudo named parameter
$newStatement = null;
$parameter = 0;
while($newStatement !== $statement)
{
if($newStatement !== null)
{
$statement = $newStatement;
}
$newStatement = preg_replace('/\?/', ':autoparam'.$parameter, $statement, 1);
$parameter++;
}
$statement = $newStatement;
Затем, когда я получаю запрос на привязку параметра от PDO, я проверяю, является ли параметр числовым. В большинстве языков, насколько я знаю, числовые индексы являются недопустимыми идентификаторами, поэтому я могу с уверенностью предположить, по крайней мере, для моего Драйвер пространства пользователей PDO, который я могу заменить числовым именем параметра:
//Replace the first @oci8param to a pseudo named parameter
if(is_numeric($parameter))
{
$parameter = ':autoparam'.$parameter;
}
Пока это работает, мне нужно провести больше тестов с laravel, чтобы увидеть, появляется ли проблема в другом балле, но пока все в порядке...