当我得到我的一张桌子的数据时,我遇到了一些麻烦。
我正在使用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 ) )
正如您在视图中看到的,当我获得查询数组时,这只显示最后一条记录。
这有什么不妥?
答案 0 :(得分:1)
<强>首先强>
OpModeloTable->getModeloSimNav
向AnSimNavTrans
提出疑问让我觉得很奇怪。为什么不使用AnSimNavTransTable
来做到这一点?
<强>第二强>
如果你想要一个数组,用数组加水,而不是使用toArray
:
$result = $query->execute(array(), Doctrine_Core::HYDRATE_ARRAY);.
用最后一件事来测试。当你的解决方案没有时,我不知道为什么这种方式有效。在查看代码时,toArray comment的函数说:
模仿$ query-&gt; execute(array(),Doctrine_Core :: HYDRATE_ARRAY)的结果;
所以,也许最好不要模仿这个功能但实际上使用它..
顺便说一句,像我告诉你的那样使用水合作用比使用toArray
更好。使用数组的水合作用背后的想法是,学说不会水合对象(和所有依赖项)。这样可以在加载页面时为您节省大量时间。
使用toArray
时,您将使用对象进行水合并将其转换为数组。你浪费了很多时间。
这是解决性能问题的第一步。