在项目中第一次使用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所述的各种方法之一来获取数据库中的结果。
希望这可以帮助遇到问题的其他人!
答案 0 :(得分:0)
我认为您可能会对有关学说的文档略微混淆并将其与symfony一起使用。从错误消息中获取DBAL \ Query \ QueryBuilder。该对象没有getQuery方法。您应该能够使用execute方法获得所需的结果。
现在我说的方式是通过用户实体的存储库类,或者我会做
$em = $this->get('doctrine.orm.entity_manager');
$qb = $em->createQueryBuilder();
然后做你以前做过的事情......