【问题标题】:Can you use named parameters in Laravel Eloquent你可以在 Laravel Eloquent 中使用命名参数吗
【发布时间】:2013-09-10 15:13:06
【问题描述】:

我使用 Oracle 作为数据库层,但问题是通过 OCI8 的 oracle(我制作了 PDO 用户空间驱动程序)仅支持 SQL 语句中的命名参数,不支持定位参数。 (比如使用多个?)

基本上,生成 SQL 的是 Laravel 的 Eloquent,但我找不到任何关于如何覆盖参数构造的文档。

我希望能够以“:name”的形式创建命名参数,而不是放置大量的“?”在整个查询过程中。

这可以吗?我的猜测是它与数据库语法类有关......

【问题讨论】:

    标签: php sql oracle pdo laravel


    【解决方案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 用户空间驱动程序,我可以将数字参数名称替换为:

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

    现在可以了,我需要用 laravel 做更多的测试,看看问题是否出现在不同的分数中,但到目前为止,它似乎还可以......

    【讨论】:

    • 您在那里编辑了哪些文件?我只是在扫描代码,看看它是如何处理绑定的。
    • 我只是编辑了自己的 PDO 用户空间驱动,现在它与 Laravel 无关......
    • 你遇到过这个吗?希望这正是您正在寻找的。 github.com/jfelder/Laravel-OracleDB
    • 是的,我将它用作我的 Laravel-OCI8 包的基础,但问题,就像我说的,是 OCI8 的一部分,而不是 Laravel 或 PDO_OCI。 PDO_OCI 不提供所有功能,可能是由于缺乏社区支持。由于我不太了解 C/C++ 并且没有时间在工作中编写此代码,因此我创建了自己的 PDO_OCI8 层,该层使用 PHP 用户空间来创建真正的 PDO 驱动程序。现在可以正常工作了,不过谢谢
    猜你喜欢
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 2011-01-26
    • 1970-01-01
    • 2013-08-06
    • 2021-09-01
    • 2017-01-28
    相关资源
    最近更新 更多