2010-11-22 86 views
3

我下表學說select語句總是返回表中的所有字段

Test: 
    tableName: test 
    columns: 
     test_id: 
      name: test_id as id 
      primary: true 
      autoincrement: true 
      type: integer 
      notnull: true 
     test_name: 
      name: test_name as name 
      type: string(255) 
     test_title: 
      name: test_title as title 
      type: string(255) 

這DQL聲明

$dql = Doctrine_Query::create()->select('t.name')->from('Model_Test t'); 

以下SQL IST產生

SELECT t.test_id AS t__test_id, t.test_name AS t__test_name FROM test t 

但畢竟有在原則中獲取結果,即使沒有選擇,我也可以訪問標題字段:

foreach ($results as $result) { 
    foreach ($result as $filed => $value) { 
     echo "$filed => $value <hr>"; // echoes 'title' => null but title in db has other value 
    }         
}         

也通過Zend_Debug :: dump($ results-> toArray())轉儲;顯示我所有的領域,如果我會做一個選擇*

那麼如何限制返回的字段以匹配我的選擇?

在此先感謝

馬丁

+0

你有沒有發現這種情況的解決方案?我也在努力。我不想將不必要的垃圾作爲json傳遞給ajax消費者。 – 2012-04-01 11:18:20

+0

Nevermind, - > setHydrationMode(Doctrine :: HYDRATE_ARRAY)已解決它。 – 2012-04-01 11:29:05

回答

0

我不知道,但我想學說僅選擇idname,但是當您嘗試訪問title它看到title不是從數據庫中取出。所以教義重新提到這個對象(只有這次使用SELECT *或類似的查詢)。

如果您有某種Doctrine查詢分析器 - 您可能會看到foreach循環中需要的所有附加查詢。

只是胡亂quess,順便......

哦,你可以,如果你想選擇字段的只有一些部分使用$query->execute(Doctrine::HYDRATE_ARRAY)

+1

yes和no:doctrine提取所有字段,但只有選定的字段有一個值(標題顯示爲null,即使它在表中還有其他值)。這很讓人困惑:將查詢外包到庫中,使用庫的用戶不知道查詢。他不知道如果標題爲空,因爲它沒有被選中,或者如果標題在數據庫中爲空。我正在尋找一種方法來遍歷選定的字段,只在選定的字段上... – Martin 2010-11-22 20:55:36

3

我想:

因爲

$results = $dql->execute(); 

取該結果作爲一個對象,所述非選擇的瓦爾被用空值填充

$results = $dql->fetchArray(); 

獲取的陣列和在這種情況下,只有選定的字段出現(除了主鍵)

1

這一個對我的作品,只取查詢的字段:

$events = Doctrine_Query::create() 
    ->select("e.id, e.Title, e.Lat, e.Lon, e.Startdate, e.Location, e.Url") 
    ->from('Event e') 
    ->setHydrationMode(Doctrine::HYDRATE_ARRAY) 
    ->execute(); 

結果數組將只包含選定字段

相關問題