symfony2中的Doctrine Querybuilder问题。使用问题

时间:2012-02-13 11:52:26

标签: symfony doctrine-orm query-builder

在项目中第一次使用doctrine,我在查询构建器方面遇到了一些问题。

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

$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()方法,我发现几乎所有我发现的例子都使用它。

我进行了搜索并找到Doctrine documentation但我现在很困惑如何使用它。

有人能够给我一个如何使用上面的例子来检索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 \ Statement,参数设置为指定的。在此声明中,您可以调用here所述的各种方法之一来获取数据库中的结果。

希望这可以帮助遇到问题的其他人!

1 个答案:

答案 0 :(得分:0)

我认为您可能会对有关学说的文档略微混淆并将其与symfony一起使用。从错误消息中获取DBAL \ Query \ QueryBuilder。该对象没有getQuery方法。您应该能够使用execute方法获得所需的结果。

现在我说的方式是通过用户实体的存储库类,或者我会做

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

然后做你以前做过的事情......