繁体   English   中英

php 代码点火器在视图中生成数据库数据

[英]php code igniter generating database data in a view

我正在生成一个 html 下拉列表,我目前有代码到 select 数据库中的数据并在视图中生成结果? 这可以吗,或者我应该以某种方式将它放在 controller 中。 如果是这样,我如何从视图中调用该数据? 这是我的代码:

<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>

我想将尽可能多的数据库数据保留在我的视图之外。

修改:

MODEL:

function get_tree(){
    $query = $this->db->query('SELECT id, tree_name FROM trees');
    return $query->result_array();
}

CONTROLLER:

$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>';
        }
        ?>

您的视图应该从包含数据的 controller 接收一个数组,然后遍历该数组以填充 select。

为什么查询不包含在 model 中?

所有数据库表都应具有某种形式的关联 model。 在这种情况下,您可能想要一个Tree_Model或类似的东西。 The controller should be responsible for setting the model in its correct state (ie if there was a where predicate in your select , the controller would be responsible for giving that data to the model).

从那里开始,关于谁应该查询 model - controller 或视图,这更像是一场宗教辩论。 I'd usually put the model query in the view as the model is already in the correct state (set by the controller) to keep my controller code light.

归根结底, controller视图都不应该直接查询数据库。

查询应该是controller中的go,然后传递给要显示的视图。

查询在树model中,你有一个 function 之类的 get_trees(),然后你从controller用类似 $_tree 的东西调用它

然后你将它传递给视图并循环遍历它。 这就是MVC的方式。

对于您的修订代码,您还应该添加 Model “return $query->result_array();”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM