2013-02-14 109 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时,您将用对象进行水合并将其转换为数组。你浪费很多时间。

这是修复性能问题的第一步。