2011-02-06 31 views
5

Vì vậy, tôi gặp sự cố này, nó khá đơn giản, nhưng tôi không biết tại sao tôi không thể tìm ra. Tôi "m mới cho toàn bộ ý tưởng của MVC, và tôi đang cố gắng để vượt qua một truy vấn cơ sở dữ liệu từ bộ điều khiển của tôi vào một cái nhìn và hiển thị các kết quả trong xem. Cách tôi đang làm nó bây giờ nói" biến không xác định, sql " . khi tôi nạp Quan điểm này là những gì tôi có:chuyển kết quả truy vấn sql từ bộ điều khiển sang chế độ xem bằng mã đánh số

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

xEM

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

(Nếu tôi chỉ echo nó ra trong bộ điều khiển, nó sẽ hiển thị các kết quả)

A ny giúp đỡ sẽ là tuyệt vời ... CẢM ƠN!

Trả lời

15

vài mẹo ~

make_login của bạn phải ở trong một mô hình. điều khiển của bạn sẽ trông một cái gì đó như thế này:

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

bây giờ trong mô hình của bạn, có cái gì đó như:

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

và cuối cùng, quan điểm của bạn:

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

xem làm thế nào có một phương pháp trong 'login_model' của bạn bây giờ làm cho ý nghĩa ngữ nghĩa hơn? nó rõ ràng những gì nó làm, bạn có thể mở rộng nó một cách dễ dàng ... viết lại các 'get_departments' chức năng để có một ID như một tham số, sau đó trả lại một bộ phận cụ thể. Không có ID? Trả lại tất cả. – Ross

+0

yea, điều đó có ý nghĩa ... nhưng có vẻ như có nhiều công việc hơn nếu tôi chỉ sử dụng truy vấn đó trong một điểm đó ... tại sao tôi không đặt nó vào bộ điều khiển? – Bill

+0

Vì đó là cách MVC được cho là làm việc, hay đúng hơn là khái niệm. Bạn không * có * để làm bất cứ điều gì. Nhưng điều gì xảy ra, nếu một ngày nào đó bạn cần thêm một chức năng hoặc truy vấn khác? Liệu điều đó cũng có trong bộ điều khiển không? Bằng cách đột nhập vào MVC, bạn có thể tạo mã dễ quản lý hơn nhiều. – Ross

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

Bạn cần phải vượt qua mảng $ trong Tôi không chắc chắn những gì -.> Tải-> view() không và làm thế nào nó xử lý các thông số đến.

+0

bạn có thể giải thích điều này không? – benhowdle89

+0

Đã cập nhật bài đăng của tôi. Lấy làm tiếc. – iBiryukov

+0

Bạn có thể hiển thị cái gì -> tải-> xem không – iBiryukov

2

Truy vấn SQL phải được thực hiện trong mô hình.

Thiết bị ghi nhớ giá rẻ: D trong mô hình = cơ sở dữ liệu.

Trong Controller, bạn gán một phần của mảng $ dữ liệu đến các kết quả của truy vấn:

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

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

Trong Model, bạn làm như truy vấn thực tế:

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

Bây giờ, trong chế độ xem, mỗi phần tử của $ data sẽ là biến riêng của nó:

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

Vậy đó!

+0

bạn nên cấu trúc câu trả lời của mình xung quanh câu hỏi cụ thể hơn – jondavidjohn

+0

Sao chép và dán không có cách nào để tìm hiểu bất kỳ điều gì. Tôi đã đăng một ví dụ chung để OP có thể làm việc với nó và thực sự hiểu được mã nào. – Peter

+0

cuối cùng là một cách làm việc để trả về dữ liệu từ mô hình. một lên –

1

Dường như một trong hai CI gây nhầm lẫn cho bạn hoặc bạn cũng mới sử dụng PHP. Chúng chỉ là các hàm để bạn không thể truyền các biến như thế.

Khi truyền mảng kết hợp, nó sẽ lấy khóa và biến nó thành một biến với giá trị trong mảng, sử dụng các hàm PHP gốc. Những gì Ross nói là chính xác những gì bạn có nghĩa vụ phải làm.

mẫu: tất cả những thứ cơ sở dữ liệu Bộ điều khiển: sử dụng mô hình để vượt qua các biến quan điểm Xem: kết quả đầu ra các biến (một cái nhìn không bao giờ nên có bất kỳ sql trong nó)

Cũng lưu ý kết quả đó và result_array có cùng dữ liệu nhưng kết quả trả về các đối tượng và result_array trả về các mảng kết hợp.

Các vấn đề liên quan