注入学说 dbal 与 symfony 3 一起服务


Inject doctrine dbal in service with symfony 3

我会尽量清楚:我需要在我的一个存储库中使用SQL。我在互联网上读到,我必须使用Doctrine的DBAL才能使其工作。我在这里举了一个例子:如何在 Symfony2 服务类中访问 Doctrine DBAL?或者有 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''连接对象并获取实体管理器。

这是我的捆绑包/资源/配置/服务.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 的实例,在第 68 行调用 D:''dev''php''MyProject''vendor''doctrine''orm''lib''Doctrine''ORM''Repository''DefaultRepositoryFactory.php并定义 500 内部服务器错误 - 上下文错误异常

有人对此错误有任何想法以及如何解决它吗?

注意:我已经尝试不在app/config.yml中命名我的连接,因为我想它应该保留给多个连接。我还尝试使用"@database_connection"作为我的存储库构造函数的参数,还尝试了"@doctrine.dbal",而我的连接没有命名。

Nb2:如果需要,这是我的作曲家的一部分.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 请求进行查询的唯一方法......但事实并非如此。