我会尽量清楚:我需要在我的一个存储库中使用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: MyBundleRepositoryMyRepository
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 DoctrineORMEntityRepository
{
public function findAllServices(){
$sql = "SELECT * FROM stuff";
return $this->getEntityManager()->getConnection()->fetchAll($sql);
}
}
我以为我必须使用 DBAL,因为我认为这是使用普通旧 sql 请求进行查询的唯一方法......但事实并非如此。