Php 使用symfony 3将dbal注入服务中
我将尽可能清楚地说明:我需要在我的一个存储库中使用SQL。我在互联网上读到,我必须使用Doctrine的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(){
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