2012-02-13 56 views
1

在项目中首次使用原则,而且我在查询生成器中遇到了一些问题。symfony2中的学说Querybuilder问题。使用问题

首先亮相,在控制器我用下面的:

$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 \查询\ 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

我想你可能会对教条上的文件稍加混淆,并将它与symfony一起使用。从错误消息中得到一个DBAL \ Query \ QueryBuilder。该对象没有getQuery方法。你应该可以使用execute方法来获得你想要的结果。

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

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

然后做你做之前...

+0

谢谢!是的,我认为我的大脑中有Zend_Db,并且有一半人期望它的行为方式相同。你在上面提到的实现与Doctrine的ORM方面(我正在另一个项目中使用)有很大关系。然而,在这个项目中,所有的模型和映射器都已到位,所以我只想使用DBAL。当我没有实体时(参见Doctrine的意义),引用实体管理器似乎很奇怪,所以只是想通过数据库连接来使用它。只是个人喜好。我到最后去了(见编辑的问题)。谢谢! – steveYeah 2012-02-13 16:30:37