问题描述
|
我正在生成一个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>
我想尽可能多地保留数据库数据。
修订版:
模型:
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>\';
}
?>
解决方法
查询在树模型中进行,在树模型中,您有一个类似于get_trees()的函数,您可以从控制器中使用$ trees = $ this-> Tree-> get_trees();进行调用。
然后,将其传递到视图并循环浏览。这就是MVC方式。
对于您的REVISED代码,您还应该添加Model \“ return $ query-> result_array(); \”
, 您的视图应该从控制器接收包含数据的数组,然后遍历该数组以填充选择。
, 为什么查询不包含在模型中?
所有数据库表都应具有某种形式的关联模型。在这种情况下,您可能想让lines4ѭ或类似的东西出现。控制器应负责将模型设置为正确的状态(即,如果您的
select
中有where
谓词,则控制器应负责将数据提供给模型)。
从那里开始,关于谁应该查询模型(控制器或视图)的争论更多。我通常会将模型查询放在视图中,因为模型已经处于正确的状态(由控制器设置),以使控制器代码保持明亮状态。
归根结底,控制器或视图都不应直接查询数据库。
, 该查询应进入控制器,然后传递到要显示的视图。