当我获取其中一个表的数据时,遇到了一些问题。
我使用的是Doctrine 1+Codeigner,问题是数据只获得最后一个注册表。
我没有定义这些表(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 ) )
正如您在视图中看到的,当我获得查询的数组时,它只显示最后一条记录。
这是怎么回事?
第一个:
OpModeloTable->getModeloSimNav
对AnSimNavTrans
进行查询,我觉得很奇怪。为什么不使用AnSimNavTransTable
来做到这一点?
第二:
如果你想要一个数组,用数组水合,而不是用toArray
:
$result = $query->execute(array(), Doctrine_Core::HYDRATE_ARRAY);.
用最后一件东西来测试。我不知道当你的解决方案不起作用时,为什么这种方式会起作用。查看代码时,toArray注释的函数会显示:
模拟$query->execute(array(),Doctrine_Core::HYDRATE_array)的结果;
所以,也许最好不要模仿这个功能,而是实际使用它。
顺便说一句,像我告诉你的那样使用水合作用比使用toArray
要好。使用数组水合的想法是,条令不会水合对象(以及所有依赖项)。这将在加载页面时为您节省大量时间。
当使用toArray
时,您将使用对象进行水合,并在将其转换为数组后进行水合。你浪费了很多时间。
这是修复性能问题的第一步。