php - 使用 symfony 3 注入(inject)服务中的 Doctrine dbal

标签 php doctrine symfony

我会尝试尽可能清楚地说明:我需要在我的存储库之一中使用 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 部分:

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

最后,这是错误:

Catchable Fatal Error: Argument 1 passed to MyBundle\Repository\MyRepository::__construct() must be an instance of Doctrine\DBAL\Connection, instance of Doctrine\ORM\EntityManager given, called in D:\dev\php\MyProject\vendor\doctrine\orm\lib\Doctrine\ORM\Repository\DefaultRepositoryFactory.php on line 68 and defined 500 Internal Server Error - ContextErrorException

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

注意:我已经尝试不在 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/

相关文章:

php - Symfony - 从哪个版本开始

javascript - 在 php 中隐藏检查元素

mysql - Doctrine :架构:更新不更新数据库

doctrine - Symfony 1.4 Doctrine - 中间表中带有额外字段的多对多关系

php - 如何从 Symfony 的 HttpFoundation 组件检索基本身份验证凭据?

php - 交响乐 2 : how to fire code before EVERY controller-action?

php - GUI MySQL 数据库前端

javascript - 在 javascript 中调用 php 文件不起作用

php - Preg_match 文本文件并在单个代码中显示多个结果

php - Doctrine:根据条件计算实体的项目