使用代码点火器将控制器中的sql查询结果传递给视图

时间:2011-02-06 19:29:39

标签: php codeigniter

所以我遇到了这个问题,应该很简单,但我不知道为什么我无法解决这个问题。我对MVC的整个想法不熟悉,我正在尝试将数据库查询从我的控制器传递到视图中并在视图中显示结果。我现在这样做的方式是“未定义的变量,sql”当我加载视图时。这就是我所拥有的:

CONTROLLER

function make_login()
{
    //Select list of departments for dropdown
    $this->load->database();
    $sql = $this->db->query('SELECT departmentName FROM department ORDER BY departmentName ASC');



    $this->load->view('siteheader.php');
    $this->load->view('makelogin.php', $sql->result_array());
    $this->load->view('sitefooter.php');
}

查看

<?php
 foreach($sql->result_array() as $row)
    {
        echo $row['departmentName'];
    }
    ?>

(如果我只是在控制器中回显它,它会显示结果)

任何帮助都会很棒...... 谢谢!

4 个答案:

答案 0 :(得分:16)

很少提示〜

你的make_login应该在一个模型中。你的控制器会看起来像这样的东西

function make_login
{
    $this->load->model('login_model'); // whatever you call it

    $data['departments'] =  $this->login_model->get_departments();

    /* note - you don't need to have the extension when it's a php file */
    $this->load->view('siteheader');
    $this->load->view('makelogin', $data);
    $this->load->view('sitefooter');
}

现在在你的模型中,有类似的东西:

function get_departments()
{
    $sql = $this->db->query('SELECT departmentName FROM department ORDER BY departmentName ASC');
    return $sql->result();
    /* you simply return the results as an object
     * also note you can use the ActiveRecord class for this...might make it easier
     */
}

最后,你的观点:

<?php
    foreach($departments as $store)
    {
        echo  $store->name . '<br />'; // your fields/whatever you want to output.
    }
?>

答案 1 :(得分:2)

SQL查询应该在模型中完成。

便宜的助记符设备:模型中的D =数据库。

在Controller中,您将$ data数组的一部分分配给查询结果:

$this->load->model('blog_model');
$data['posts'] = $this->blog_model->getPosts();

// Load the view with the data
$this->load->view('blog', $data);

在模型中,您执行实际查询:

public function getPosts()
{
    // Method chaining supported in PHP 5
    $this->db->select('*')->from('posts');

    // Assign the query object to a variable
    $query = $this->db->get();

    // We don't want to return an empty result, so let's handle that error somehow
    if (!$query->num_rows() > 0) {
        die("There are no posts in the database.");
    }

    // Make a new array for the posts
    $posts = array();

    // For the purposes of this example, we'll only return the title
    foreach ($query->result() as $row) {
        $posts[$row->id] = $row->title;
    }

    // Pass the result back to the controller
    return $posts;
}

现在,在视图中,$ data的每个元素都是它自己的变量:

    <div class="post">
    <?php foreach ($posts as $id => $title) : ?>
        <h1 class="post-title"><?php echo $title; ?> (ID: <?php echo $id; ?>)</h1>
        <p class="post-content">
        .......
        </p>
        <?php endforeach; ?>
    </div>

就是这样!

答案 2 :(得分:1)

似乎CI让您感到困惑,或者您也是PHP新手。它们只是函数,所以你不能传递这样的变量。

当传递一个关联数组时,它将获取该键并使用本机PHP函数将其转换为具有数组值的变量。罗斯所说的正是你应该做的。

模型:所有数据库的东西 Controller:使用模型将变量传递给视图 查看:输出变量(视图中不应包含任何sql)

另请注意,result和result_array具有相同的数据,但结果返回对象,result_array返回关联数组。

答案 3 :(得分:0)

 foreach($array as $row)
    {
        echo $row['departmentName'];
    }
    ?>

你需要传递$数组。 我不确定 - &gt; load-&gt; view()是什么以及它如何处理传入参数。