2013-09-06 5 views
2

Я использую Oracle как уровень базы данных, но проблема в том, что оракул через OCI8 (я создал драйвер пользовательского пространства PDO) поддерживает только именованные параметры в операторах SQL и не поддерживает позиционные параметры. (Например, используя несколько?)Можете ли вы использовать именованные параметры в Laravel Eloquent

На базе это Larvel's Eloquent, который генерирует SQL, но я не могу найти документацию о том, как переопределить конструкцию параметров.

Я хотел бы иметь возможность создавать именованные параметры в форме «: name» вместо размещения многочисленных «?» во всем запросе.

Можно ли это сделать? Я предполагаю, что это имеет какое-то отношение к классам грамматики базы данных ...

ответ

1

Хорошо, если у кого-то есть лучшее решение, перейдите к нему или скажите мне, что может быть неправильно в моем временном решении. Я заменяю все «?» с ": 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 UserSpace, что я могу заменить имя числового параметра с:

//Replace the first @oci8param to a pseudo named parameter 
    if(is_numeric($parameter)) 
    { 
     $parameter = ':autoparam'.$parameter; 
    } 

Он работает сейчас , мне нужно сделать больше тестов с помощью laravel, чтобы узнать, появляется ли проблема в другом баллах, но пока все кажется ...

+0

Какие файлы вы там редактировали? Я просто просматривал код, чтобы посмотреть, как он обрабатывает привязку. – fideloper

+0

Я только что отредактировал свой собственный пользовательский драйвер PDO, теперь он не имеет ничего общего с Laravel ... –

+1

Вы сталкивались с этим? Надеюсь, это именно то, что вы ищете. https://github.com/jfelder/Laravel-OracleDB – fideloper