Php 使用symfony 3将dbal注入服务中

Php 使用symfony 3将dbal注入服务中,php,doctrine,symfony,Php,Doctrine,Symfony,我将尽可能清楚地说明:我需要在我的一个存储库中使用SQL。我在互联网上读到,我必须使用Doctrine的DBAL使其工作。我在这里举了一个例子: 还是那里 这是我的回购协议: class myRepository { private $conn; public function __construct(Connection $conn){ $this->conn = $conn; } public function getStuff(){

我将尽可能清楚地说明:我需要在我的一个存储库中使用SQL。我在互联网上读到,我必须使用Doctrine的DBAL使其工作。我在这里举了一个例子: 还是那里

这是我的回购协议:

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

这是我的包/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
最后,这里是错误

class myRepository
{
    private $conn;

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

    public function getStuff(){
        $sql = "SELECT * FROM stuff";
        return $this->conn->fetchAll($sql);
    }
}
可捕获的致命错误:传递给MyBundle\Repository\MyRepository::\uu construct()的参数1必须是Doctrine\DBAL\Connection的实例,给定的Doctrine\ORM\EntityManager的实例,在第68行的D:\dev\php\MyProject\vendor\doctor\orm\lib\doctor\orm\Repository\DefaultRepositoryFactory.php中调用,并定义了500内部服务器错误-ContextErrorException

有人知道这个错误,以及如何修复它吗?

Nb:我已经尝试在app/config.yml中不命名我的连接,因为我想它应该保留给多个连接。我还尝试使用“@database_connection”作为我的repo构造函数的参数,在我的连接未命名时也尝试使用“@doctor.dbal”

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

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

好的,我会回答自己:我不知道问题从何而来,这仍然是一个有趣的问题,但我设法用另一种(更简单的方式)来解决:


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

很高兴你可以使用它,但是你原来的设置应该可以使用。看不出你怎么可能得到一个em注入而不是dbal连接。你真的在从集装箱里提取我的回购吗?好像你在用新的接线员。不,任何地方都没有新的接线员。除了我在这里展示的,我什么都没做。我的控制器只是调用我的回购方法。我只想使用services.yml注入抽象层,因此我没有编写任何php代码,只编写了Repo中的代码。但是关于我自己的答案,我有点傻,因为我尝试了所有这些“复杂性”,而我几乎可以在一行php中完成它。这很公平。我不认为您使用了“@database\u connection”而不是“@doctor.dbal.default\u connection”的可能性有多大?我知道这并不重要,但如果您坚持使用纯sql,那么您就不需要实体管理器或从EntityRepository进行扩展。只是在一个无聊的下午有点神秘。我两次都试过了,都没用。不管怎么说,只要我能继续工作,我对symfony做一些超出我技能的巫术没意见:D