2013-02-14 85 views
1

我遇到一些麻煩,當我得到我的表中的一個數據。Doctrine 1不會在CodeIgniter 2上正確返回數據數組

我正在使用Doctrine 1 + Codeigniter,問題是數據只獲取最後一個註冊表。

我沒有定義這個表之間的任何關係(OpModelos和AnSimNavTrans),這是風景:

控制器:

class Modelos extends CI_Controller { 

    public function view($idModelo) { 
     $aData['site_description'] = 'AutoDato'; 
     $aData['site_keywords'] = 'keywords'; 
     $aData['site_robots'] = 'robots'; 
     $aData['site_author'] = 'author'; 

     $modelo = Doctrine::getTable('OpModelo')->find($idModelo); 
     $modelo_caract = Doctrine::getTable('anCaractUserMo')->getByModeloId($idModelo); 
     $modelos_similares_nav = Doctrine::getTable('OpModelo')->getModeloSimNav($idModelo); 

     $aData['modelo'] = $modelo; 
     $aData['modelo_caract'] = $modelo_caract; 
     $aData['modelos_similares_nav'] = $modelos_similares_nav; 

     $aData['view'] = 'modelo/view'; 

     $this->load->view('template', $aData); 
    } 
} 

數據表AnSimNavTrans

op_modelo_id cod_mod med_sim 
    1   10  0.9 
    1   2  0.8 
    1   11  0.7 
    1   4  0.5 
    1   6  0.1 

型號

class OpModeloTable extends Doctrine_Table { 

    public function getModeloSimNav($idModelo) { 
     $query = Doctrine_Query::create(); 
     $query->from('AnSimNavTrans'); 
     $query->where('op_modelo_id = ?', $idModelo); 
     $query->orderBy('med_sim DESC'); 
     $query->limit('3'); 

     $result = $query->execute(); 

     return $result->toArray(); 
    } 
} 

查看:

print_r($modelos_similares_nav); 

Array ([0] => Array ([op_modelo_id] => 1 [cod_mod] => 11 [med_sim] => 0.7)) 

正如你可以在視圖中看到,當我查詢的陣列,這隻能說明過去的記錄。

這有什麼問題嗎?

+1

第一:我覺得'OpModeloTable-> getModeloSimNav'查詢'AnSimNavTrans'讓我感到很奇怪。爲什麼不使用'AnSimNavTransTable'來做到這一點?第二:如果你想要一個數組,用數組來代替使用'toArray':'$ result = $ query-> execute(array(),Doctrine_Core :: HYDRATE_ARRAY);'。測試這最後一件事。 – j0k 2013-02-15 08:29:19

+0

我<你3! 您的解決方案完美運行,但是,爲什麼?我不明白爲什麼當我執行查詢時,這返回值沒有問題,但是,我的代碼只顯示查詢的最後記錄? 現在,尊重第一個問題,在作出調整後,我將查詢改爲AnSumNavTransTable :) 感謝您的幫助:) – 2013-02-16 14:46:16

+0

所以我會將它作爲答案發布。但我不知道爲什麼你的解決方案無法正常工作。 – j0k 2013-02-17 08:59:41

回答

1

第一:

它覺得奇怪,我OpModeloTable->getModeloSimNav進行查詢,以AnSimNavTrans。爲什麼不使用AnSimNavTransTable來做到這一點?

二:

如果你想要一個數組,水合物陣列而不是使用toArray

$result = $query->execute(array(), Doctrine_Core::HYDRATE_ARRAY);. 

測試這個最後一件事。我不知道當你的解決方案沒有時,這種方式爲什麼會起作用。 toArray評論的功能說:

模仿$ query-> execute(array(),Doctrine_Core :: HYDRATE_ARRAY)的結果;

所以,也許這是最好不要模仿這個功能,但實際使用它..

順便說一句,使用水化就像我告訴你的是比使用toArray更好。在數組中使用水合作用的想法是該教條不會水合對象(以及所有的依賴關係)。這會爲您節省很多時間當頁面加載。

當使用toArray時,您將用對象進行水合並將其轉換爲數組。你浪費很多時間。

這是修復性能問題的第一步。