Можете ли вы использовать именованные параметры в Laravel Eloquent


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

В основе, это красноречивый Laravel, который генерирует SQL, но я не могу найти никакой документации о том, как переопределить построение параметров.

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

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

Author: Mathieu Dumoulin, 2013-09-06

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, чтобы увидеть, появляется ли проблема в другом балле, но пока все в порядке...

 1
Author: Mathieu Dumoulin, 2013-09-06 14:10:33