2013-02-14 96 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