Doctrine 1不会在CodeIgniter 2上正确返回数据数组

时间:2013-02-14 17:40:33

标签: php codeigniter doctrine

当我得到我的一张桌子的数据时,我遇到了一些麻烦。

我正在使用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 个答案:

答案 0 :(得分:1)

<强>首先

OpModeloTable->getModeloSimNavAnSimNavTrans提出疑问让我觉得很奇怪。为什么不使用AnSimNavTransTable来做到这一点?

<强>第二

如果你想要一个数组,用数组加水,而不是使用toArray

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

用最后一件事来测试。当你的解决方案没有时,我不知道为什么这种方式有效。在查看代码时,toArray comment的函数说:

  

模仿$ query-&gt; execute(array(),Doctrine_Core :: HYDRATE_ARRAY)的结果;

所以,也许最好不要模仿这个功能但实际上使用它..

顺便说一句,像我告诉你的那样使用水合作用比使用toArray更好。使用数组的水合作用背后的想法是,学说不会水合对象(和所有依赖项)。这样可以在加载页面时为您节省大量时间

使用toArray时,您将使用对象进行水合并将其转换为数组。你浪费了很多时间。

这是解决性能问题的第一步。