2013-02-14 94 views
0

工作,我有一个功能,下面的代码在我的控制器之一:主义查询生成器不使用CodeIgniter

$qb = $this->doctrine->em->createQueryBuilder(); 
$query = $qb->select('username, password, level') 
    ->from('User', 'u'); 
     // ->where('user.username = :username') 
     // ->setParameter('username', 'userTest'); 
$users = $query->getResult(); 

导致东西默默地失败。没有错误消息,我从页面中唯一得到的是一个500服务器错误。如果我将$users = $query->getResult()行注释掉,那么页面加载就好了,所以看起来查询生成器在这里不起作用。但我不知道为什么。我是否需要以某种方式将它加载到我的Doctrine.php库文件中?我不这么认为。

我发现的另一个奇怪的事情是,如果我试图通过getRepository方法检索条目,它会将DQL语句打印出来输出页面,因为在该方法中由于某种原因本身打印出DQL语句。我不会把它的结果打印出来。

任何想法这里发生了什么?我的用户类非常简单。不幸的是,我不知道有什么问题,因为没有错误报告。 D:

<?php 
namespace Entities; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
*/ 
class User { 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue 
    */ 
    private $id; 

    /** 
    * @ORM\Column(type="string") 
    */ 
    private $username; 

    /** 
    * @ORM\Column(type="string") 
    */ 
    private $password; 

    /** 
    * @ORM\Column(type="integer") 
    */ 
    private $level; 

    /** 
    * @ORM\OneToMany(targetEntity="EmailAddress", mappedBy="user") 
    */ 
    private $emails; 
} 

?> 

回答

2

您错过了一个步骤!

看看doctrine documentation

尝试:$users = $query->getQuery()->getResult();

而变化:$qb->select('u.username, u.password, u.level')

+0

我也看看文档,但我不认为这是正确的代码。不应该是'$ qb-> getQuery() - > getResult()'? (这仍然导致我得到HTTP 500服务器错误,虽然) 此外,尝试您的线路不起作用。当我有'$ users = $ query-> getQuery() - > getResult();'uncommented时,我仍然收到HTTP 500服务器错误。 – celestialorb 2013-02-14 17:05:40

+0

这与您使用'$ qb'分配'$ query'的原因相同。 尝试:'$ qb-> select('u.username,u.password,u.level')',如果它工作的话我会回答我的答案 – Pierrickouw 2013-02-14 17:16:15

+1

这很有效!谢谢!我还发现它打印出DQL是因为我在Doctrine的配置中有一个EchoSQLLogger设置。 – celestialorb 2013-02-14 17:24:35