我会尽可能清楚地尝试:我需要在我的某个存储库中使用SQL。我已经在互联网上读到我必须使用Doctrine的DBAL才能使其正常工作。我在这里举了一个例子: How do you access Doctrine DBAL in a Symfony2 service class?或http://inchoo.net/dev-talk/doctrine-dbal-with-symfony2/
这是 repo :
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 \中调用第68行的MyProject \ vendor \ doctrine \ orm \ lib \ Doctrine \ ORM \ Repository \ DefaultRepositoryFactory.php并定义了500内部服务器错误 - ContextErrorException
是否有人对此错误有任何疑问,以及如何解决此问题?
Nb :我已经尝试不在app / config.yml中命名我的连接,因为我猜它应该保留给多个连接。我还尝试使用" @database_connection "作为我的回购构造函数的论据,也尝试过" @ doctrine.dbal "虽然我的联系没有被命名。
Nb2 :如果需要,这里是我的作曲家的一部分.json
"doctrine/orm": "^2.5",
"doctrine/doctrine-bundle": "^1.6",
答案 0 :(得分:-1)
好的,我会自己回答:我没有得到问题所在的地方,这仍然很有趣,但设法以另一种方式(简化方式):
class MyRepo extends \Doctrine\ORM\EntityRepository
{
public function findAllServices(){
$sql = "SELECT * FROM stuff";
return $this->getEntityManager()->getConnection()->fetchAll($sql);
}
}
我认为我必须使用DBAL,因为我认为这是查询普通旧sql请求的唯一方法......但事实并非如此。