我将尝试尽可能地明确:我需要在我的一个存储库中使用SQL。我在互联网上读到,我必须使用Doctrine的DBAL使其正常工作。我在这里举了一个例子:
How do you access Doctrine DBAL in a Symfony2 service class?http://inchoo.net/dev-talk/doctrine-dbal-with-symfony2/

这是我的仓库:

class myRepository
{
    private $conn;

    public function __construct(Connection $conn){
        $this->conn = $conn;
    }

    public function getStuff(){
        $sql = "SELECT * FROM stuff";
        return $this->conn->fetchAll($sql);
    }
}


问题出在构造函数中的$ conn参数上。
我正在尝试获取DBAL \ connection对象,而是获取EntityManager。

这是我的Bundle / Resources / config / services.yml

services:
    my_repo:
    class: MyBundle\Repository\MyRepository
    arguments: ["@doctrine.dbal.default_connection"]


和app / config.yml原则部分:

doctrine:
dbal:
    default_connection: default
    connections:
        default:
            driver:   pdo_mysql
            host:     "%database_host%"
            port:     "%database_port%"
            dbname:   "%database_name%"
            user:     "%database_user%"
            password: "%database_password%"
            charset:  UTF8


最后,这是错误:


可捕获的致命错误:传递给MyBundle \ Repository \ MyRepository :: __ construct()的参数1必须是Doctrine \ DBAL \ Connection的实例,给出了Doctrine \ ORM \ EntityManager的实例,并在D:\ dev \ php \ MyProject \ vendor中调用\ doctrine \ orm \ lib \ Doctrine \ ORM \ Repository \ DefaultRepositoryFactory.php在第68行并定义了500 Internal Server Error-ContextErrorException


是否有人对此错误有任何想法,以及如何解决?

Nb:我已经尝试过不在app / config.yml中命名我的连接,因为我想应该为多个连接保留连接。我还尝试使用“ @database_connection”作为我的存储库构造函数的参数,还尝试使用“ @ doctrine.dbal”(未命名我的连接)。

Nb2:如果需要,这是我的composer.json的一部分

"doctrine/orm": "^2.5",
"doctrine/doctrine-bundle": "^1.6",

最佳答案

好的,我对自己说:我不知道问题出在哪里,这仍然很有趣,但是设法以另一种(更简单的方式)做到了:

class MyRepo extends \Doctrine\ORM\EntityRepository
{

    public function findAllServices(){
        $sql = "SELECT * FROM stuff";
        return $this->getEntityManager()->getConnection()->fetchAll($sql);
    }
}


我以为我必须使用DBAL,因为我认为这是用普通的旧sql请求进行查询的唯一方法……但是事实并非如此。

关于php - 在Symfony 3中注入(inject) Doctrine 的dbal,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35527200/

10-09 08:31
查看更多