在项目中第一次使用教义,我在查询生成器上遇到了一些问题。
首先,在控制器中,我使用了以下内容:
$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,参数设置为指定的。从此语句中,您可以调用此处所述的各种方法之一来从数据库中获取结果。
希望这可以帮助其他遇到问题的人!