Php Symfony 2:如何在服务中执行sql查询

Php Symfony 2:如何在服务中执行sql查询,php,symfony,Php,Symfony,上周我开始使用Symfony 2,我对如何使用模型以及如何创建自己的特定函数感到有点困惑 我在services.yml文件中创建了一个服务测试: services: testing: class: AppBundle\Service\MyService arguments: [ @doctrine.orm.entity_manager ] 这是MyService类 class myService { /** * @InjectParams({ * "em" = @Inject("

上周我开始使用Symfony 2,我对如何使用模型以及如何创建自己的特定函数感到有点困惑

我在services.yml文件中创建了一个服务测试

services:
testing:
class: AppBundle\Service\MyService
 arguments: [ @doctrine.orm.entity_manager ]
这是MyService类

class myService
{

/**
 * @InjectParams({
 *    "em" = @Inject("doctrine.orm.entity_manager")
 * })
 */


  public function __construct(EntityManager $em)
  {
  $this->em = $em;
  }


  function getQuery($id){
   $sql = "SELECT firstname FROM players WHERE id = $id";

    $em = $this->getDoctrine()->getManager();
    $stmt = $em->getConnection()->prepare($sql);
    $stmt->execute();
    $players = $stmt->fetchAll();
}
我希望在服务中执行查询,并在控制器中加载函数getQuery(),如下所示:

$locationService = $this->container->get('testing');
$ownFunction = $locationService->getQuery($id);
当我执行上面的脚本时,我得到了一个错误。

我认为它一定是错误的

function getQuery($id){
$sql = "SELECT firstname FROM players WHERE id = $id";

$stmt = $this->em->getConnection()->prepare($sql);
$stmt->execute();
$players = $stmt->fetchAll();

“$em=$this->getDoctrine()->getManager();”不再需要了,因为您已经将条令实体管理器作为$this->em注入到构造中。

您的
getQuery
方法是错误的。既然您已经将
EntityManager
注入到构造函数中,您应该使用它(您的服务``中没有可用的
getdoctor
方法)


编辑:您还错过了
使用条令\ORM\EntityManager
在您的类的顶部

您会遇到什么错误?您已经在服务定义中注入了
EntityManager
。不需要使用
Inject
注释。您可以直接访问
$this->em
,显然您的注释是无用的。放下它,再试一次我,我试图根据你的建议重写脚本,但我总是得到相同的可捕获错误致命错误:传递给AppBundle\Service\Testing的参数1::\uu construct()必须是AppBundle\Service\EntityManager的实例,给定的条令\ORM\EntityManager的实例,在第2565行的/WWW/lab.blueye.ch/WWW/app/cache/dev/appDevDebugProjectContainer.php中调用并定义
public function getQuery($id){
    $sql = "SELECT firstname FROM players WHERE id = :id";

    $stmt = $this->em->getConnection()->prepare($sql);
    $stmt->bindValue(':id', $id); //you should do this to be sql-injection safe
    $stmt->execute();

    return $stmt->fetchAll(); //you didn't return anything in your function


}