【问题标题】:php code igniter generating database data in a viewphp代码点火器在视图中生成数据库数据
【发布时间】:2011-05-27 17:23:36
【问题描述】:

我正在生成一个 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>';
        }
        ?>

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    您的视图应该从包含数据的控制器接收一个数组,然后循环遍历该数组以填充选择。

    【讨论】:

    • 好的 - 所以我试着按照这个例子:stackoverflow.com/questions/3041616/… 并且我有一个错误。我已经修改了上面的代码。我不确定我应该如何从我的控制器中的模型中引用数据库查询。任何帮助将不胜感激
    【解决方案2】:

    为什么查询不包含在模型中?

    所有数据库表都应该有一些形式的关联模型。在这种情况下,您可能需要Tree_Model 或类似的东西。控制器应负责将模型设置为正确状态(即,如果您的 select 中有 where 谓词,控制器将负责将该数据提供给模型)。

    从那里开始,关于谁应该查询模型(控制器或视图)更像是一场宗教辩论。我通常会将模型查询放在视图中,因为模型已经处于正确的状态(由控制器设置)以保持我的控制器代码简洁。

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

    【讨论】:

    • 对于投反对票的人来说,它已经过编辑,所以你可能想再看一遍(在第一个答案之前我没有仔细阅读这个问题)
    【解决方案3】:

    查询进入树 model,在那里你有一个类似 get_trees() 的函数,你可以从 controller 调用它,比如 $trees = $this- >树->get_trees();

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

    对于您的 REVISED 代码,您还应该在模型中添加“return $query->result_array();”

    【讨论】:

    • 啊 - 那么为什么树没有定义呢?或者更确切地说,我必须做什么来定义它。我得到的错误是:消息:未定义的属性:Control_form::$trees。我只想建立一个从控制器到从模型中的数据库检索到的数据的链接
    • 你的模型应该被称为 Trees,并被加载到控制器中:$this->load->model('Trees');
    • 嗯 - 修复了错误 - 但现在我没有在下拉列表中得到我的结果。伙计……当然,将代码转储到视图中的一个紧凑语句中似乎要容易得多。一定是我想念的东西
    • 所以在模型中你有返回 $query->result(),对吧?我看不出您的代码有任何其他问题。
    • 是的 - 我已经修改了上面的代码 - 没有错误,但也没有结果。
    【解决方案4】:

    查询应该进入控制器,然后传递给要显示的视图。

    【讨论】:

    • @Corey db 查询不应直接进入控制器。它们应该在模型或 DA 层中。
    • 我没有看到他在那里写了整个数据库查询,我以为他在做 $this->Tree->find() 什么的,应该放在控制器中,而不是模型,但如果他正在编写客户查询(不应该这么简单),那么它应该作为模型中的一种方法,正确。
    • 所以如果我不应该编写自定义查询,我应该怎么做呢?只是想了解最佳实践,因为我是新手
    • 我不使用 codeignitor,但是在 cakePHP 中你会做这样的事情: $this->Tree->find('all',array('fields'=>array('id' ,'树名')));您应该想要执行的大多数查询应该可以使用您的模型而不是直接 db 查询。那就是MVC的一个点就是把数据库抽象成一个对象,不用写那么多sql。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多