2011-02-06 13 views
5

Tak więc mam ten problem, powinien być całkiem prosty, ale nie wiem, dlaczego nie mogę tego zrozumieć. Jestem nowy na cały pomysł MVC i próbuję przekazać zapytanie bazy danych z mojego kontrolera do widoku i wyświetlić wyniki w widoku. Sposób, w jaki teraz to robię, mówi "niezdefiniowana zmienna, sql" ., kiedy załadować widok to co mam:przekazywanie wyników kwerendy sql z kontrolera do widoku z zapisem kodu

kONTROLER

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'); 
} 

wIDOK

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

(Gdybym tylko echo ją w sterowniku, to wyświetla wyniki)

A ny pomoc byłaby niesamowita ... DZIĘKI!

Odpowiedz

15

kilka wskazówek ~

Twój make_login powinien znajdować się w modelu. kontroler będzie wyglądać coś takiego:

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'); 
} 

teraz w modelu, mam coś takiego:

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 
    */ 
} 

i wreszcie Państwa zdanie:

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

Zobacz, jak posiadanie metody w 'login_model' ma teraz sens bardziej semantyczny? to oczywiste, co robi, możesz go łatwo rozszerzyć ... przerobić funkcję 'get_departments', aby pobrać ID jako parametr, a następnie zwrócić określony dział. Brak identyfikatora? Zwróć je wszystkie. – Ross

+0

tak, to ma sens ... ale wydaje się, że dużo więcej pracy, jeśli zamierzam użyć tego zapytania w tym jednym miejscu ... dlaczego nie po prostu umieściłem to w kontrolerze? – Bill

+0

Bo tak ma działać MVC, a raczej koncepcja. Nie musisz * nic robić. Ale co się stanie, jeśli pewnego dnia trzeba będzie dodać kolejną funkcję lub zapytanie? Czy to też przejdzie w kontrolerze? Poprzez włamanie się do MVC możesz stworzyć znacznie łatwiejszy w zarządzaniu kod. – Ross

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

Trzeba zdać $ tablicę w Nie jestem pewien, co. -> Load> Widok() robi i jak traktuje przychodzących parametry.

+0

czy możesz to wyjaśnić? – benhowdle89

+0

Zaktualizowałem mój post. Przepraszam. – iBiryukov

+0

Czy możesz pokazać, co -> ładowanie-> widok robi – iBiryukov

2

Zapytanie SQL powinno zostać wykonane w modelu.

Tanie urządzenie mnemoniczne: D w modelu = baza danych.

w sterowniku, można przypisać część tablicy $ dane do wyników zapytania:

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

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

w modelu zrobić rzeczywiste zapytanie:

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

Teraz, w w widoku każdy element danych $ będzie jego własną zmienną:

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

To wszystko!

+0

powinieneś raczej ustrukturyzować swoją odpowiedź na pytanie bardziej szczegółowo. – jondavidjohn

+0

Kopiowanie i wklejanie nie jest sposobem na naukę. Wysłałem ogólny przykład, aby OP mógł z nim pracować i faktycznie zrozumieć, co robi kod. – Peter

+0

wreszcie działa sposób na zwrócenie danych z modelu. jeden w górę –

1

Wydaje się, że zarówno CI cię mylą lub jesteś nowy w PHP. Są to tylko funkcje, więc nie można przekazywać takich zmiennych.

Przy przekazywaniu tablicy asocjacyjnej klucz zostanie wprowadzony do zmiennej z wartością w tablicy, używając natywnych funkcji PHP. To, co powiedział Ross, jest dokładnie tym, co powinieneś zrobić.

Model: wszystkie rzeczy bazie Kontroler: wykorzystuje modele przekazać zmienne do poglądów Widok: wyświetla zmienne (widok nigdy nie powinny mieć żadnego sql w nim)

Zauważ też, że wynik i result_array mają te same dane ale wynik zwraca obiekty, a result_array zwraca tablice asocjacyjne.

Powiązane problemy