繁体   English   中英

使用symfony 3注入doctrine dbal

[英]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 \\连接对象并获取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中调用第68行上的\\ doctrine \\ orm \\ lib \\ Doctrine \\ ORM \\ Repository \\ DefaultRepositoryFactory.php并定义了500内部服务器错误 - ContextErrorException

有没有人对这个错误有任何想法,以及如何解决它?

Nb :我已经尝试不在app / config.yml中命名我的连接,因为我猜它应该保留给多个连接。 我也尝试使用“ @database_connection ”作为我的repo的构造函数的参数,也尝试了“ @ 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请求查询的唯一方法......但事实并非如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM