我正在生成一个html下拉列表,我目前有代码从数据库中选择数据并在视图中生成结果?这样可以,或者我应该以某种方式将它放在控制器中。如果是这样,我如何从视图中调用该数据?这是我的代码:
<select id="f_treeindex">
<?php
$query = $this->db->query('SELECT id, tree_name FROM trees');
foreach ($query->result() as $row)
{
echo '<option value="' . $row->id . '">' . $row->tree_name . '</option>';
};
?>
</select>
我希望尽可能多地保留我的观点中的数据库数据。
REVISED:
MODEL:
function get_tree(){
$query = $this->db->query('SELECT id, tree_name FROM trees');
return $query->result_array();
}
控制器:
$data['trees'] = $this->Model_form->get_tree();
if ($this->form_validation->run() == FALSE)
{
$this->load->view('view_form_group', $data);
}
查看:
<?php
foreach($trees as $tree){
echo '<option value="' . $tree->id . '">' . $tree->tree_name . '</option>';
}
?>
答案 0 :(得分:2)
您的视图应该从包含数据的控制器接收一个数组,然后循环遍历数组以填充选择。
答案 1 :(得分:2)
为什么查询未包含在模型中?
所有数据库表都应具有某种形式的关联模型。在这种情况下,您可能希望在这些行中有Tree_Model
或其他内容。控制器应负责将模型设置为正确状态(即如果where
中有select
谓词,控制器将负责将该数据提供给模型。
从那里开始,关于谁应该查询模型 - 控制器或视图,更多的是宗教辩论。我通常将模型查询放在视图中,因为模型已经处于正确的状态(由控制器设置)以保持控制器代码的亮度。
在一天结束时, 控制器或视图应该直接查询数据库。
答案 2 :(得分:1)
查询应该进入控制器,然后传递给要显示的视图。
答案 3 :(得分:1)
查询进入树模型,其中你有一个类似get_trees()的函数,你可以从控制器中调用它,例如$ trees = $ this- &GT;树形&GT; get_trees();
然后将其传递给视图并循环播放。那是MVC的方式。
对于您的REVISED代码,您还应该在模型中添加“return $ query-&gt; result_array();”