1

在项目中第一次使用教义,我在查询生成器上遇到了一些问题。

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

$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 文档,但我现在完全不知道如何使用它。

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

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

4

1 回答 1

0

我认为您可能会对有关教义的文档以及将其与 symfony 一起使用感到困惑。从错误消息中,您得到一个 DBAL\Query\QueryBuilder。该对象没有 getQuery 方法。您应该能够使用 execute 方法来获得您想要的结果。

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

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

然后做你之前在做的事情......

于 2012-02-13T14:33:34.903 回答