symfony2中的条令Querybuilder问题。使用问题

symfony2中的条令Querybuilder问题。使用问题,symfony,doctrine-orm,query-builder,Symfony,Doctrine Orm,Query Builder,第一次在项目中使用条令,我对查询生成器有一些问题 首先,在控制器中,我使用了以下内容: $conn = $this->get('database_connection'); $users = $conn->fetchAll('SELECT * FROM Users'); $conn = $this->get('database_connection'); $qb = $conn->createQueryBuilder(); $qb->select(&qu

第一次在项目中使用条令,我对查询生成器有一些问题

首先,在控制器中,我使用了以下内容:

$conn = $this->get('database_connection');
$users = $conn->fetchAll('SELECT * FROM Users');
$conn = $this->get('database_connection');
$qb = $conn->createQueryBuilder();
    
$qb->select("forename")
   ->from("Users", "u")
   ->where("u.id = :user_id")
   ->setParameter('user_id', 1);
    
   $query = $qb->getQuery();
   $results = $query->getResults();
这工作正常,并从MyDB返回一个用户数组

然后,我尝试使用查询生成器获取所有用户的名字。通过查看示例,我发现以下内容:

$conn = $this->get('database_connection');
$users = $conn->fetchAll('SELECT * FROM Users');
$conn = $this->get('database_connection');
$qb = $conn->createQueryBuilder();
    
$qb->select("forename")
   ->from("Users", "u")
   ->where("u.id = :user_id")
   ->setParameter('user_id', 1);
    
   $query = $qb->getQuery();
   $results = $query->getResults();
我被告知没有定义gDoctrine\DBAL\Query\QueryBuilder::getQuery()方法,我发现这很奇怪,因为我发现的几乎所有示例都使用它

我做了一次搜索,找到了,但我现在完全不知道如何使用它

请有人给我举个例子,告诉我如何使用上面的方法来检索id为1的用户的名字。我相信,一旦我有了一个简单的例子,工作,我会很好,从那里

谢谢

现在决定: 在查看文档(并在其他人的帮助下)后,我发现queryBuilder的总体布局如下所示:

$conn = $this->get('database_connection');
$qb = $conn->createQueryBuilder();

$stmt = $qb->select("forename")
   ->from("Users", "u")
   ->where("u.id = :user_id")
   ->setParameter('user_id', 1)
   ->execute();
       
$userNames = $stmt->fetchAll();
一般的想法是execute方法返回一个Doctrine\DBAL\Driver\语句,参数设置为指定的值。从该语句中,您可以调用所述的各种方法之一,以从DB获得结果


希望这能帮助其他有问题的人

我想你可能会被关于条令的文件和与symfony一起使用的文件弄糊涂了。从错误消息中,您将得到一个DBAL\Query\QueryBuilder。该对象没有getQuery方法。您应该能够使用execute方法获得所需的结果

既然如此,我将通过用户实体的存储库类或者我将这样做

$em = $this->get('doctrine.orm.entity_manager');
$qb = $em->createQueryBuilder();

然后做你以前做过的…

谢谢!是的,我想我的大脑中有Zend_Db,并且有一半的人认为这会以同样的方式发生。您上面提到的实现与ORM方面的理论(我正在另一个项目中使用)非常相关。然而,在这个项目中,所有的模型和映射器都已就位,所以我只想使用DBAL。在我没有实体(理论意义上)的情况下引用实体管理器对我来说似乎很奇怪,所以我只想通过DB连接使用它。只是个人喜好。不过,我最后还是去了那里(见编辑后的问题)。谢谢