передача результатов sql-запроса из контроллера в представление с помощью средства воспламенения кода - PullRequest
5 голосов
/ 06 февраля 2011

Итак, у меня возникла эта проблема, она должна быть довольно простой, но я не знаю, почему я не могу ее решить. Я новичок во всей идее 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');
}

VIEW

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

(Если я просто выведу его на контроллер, он отобразит результаты)

Любая помощь будет потрясающей ... СПАСИБО!

Ответы [ 4 ]

16 голосов
/ 06 февраля 2011

несколько советов ~

ваш 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.
    }
?>
2 голосов
/ 06 февраля 2011

Запрос SQL должен выполняться в модели.

Дешевое мнемоническое устройство: D в модели = база данных.

В контроллере вы присваиваете часть массива $ 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>

Вот и все!

1 голос
/ 07 февраля 2011

Кажется, что либо CI сбивает вас с толку, либо вы новичок в PHP.Они просто функции, поэтому вы не можете передавать такие переменные.

При передаче ассоциативного массива он возьмет ключ и превратит его в переменную со значением в массиве, используя встроенные функции PHP.Росс сказал, что это именно то, что вы должны делать.

Модель: все вещи базы данных. Контроллер: использует модели для передачи переменных в представления. Представление: выводит переменные (представление не должно иметь никакого sql)

Также обратите внимание, что result и result_array имеют одинаковые данные, но result возвращает объекты, а result_array возвращает ассоциативные массивы.

0 голосов
/ 06 февраля 2011
 foreach($array as $row)
    {
        echo $row['departmentName'];
    }
    ?>

Вам нужно передать массив $. Я не уверен, что -> load-> view () и как он обрабатывает входящие параметры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...