2011-02-06 19 views
5

この問題が発生していますが、それはかなりシンプルにする必要がありますが、なぜそれを理解できないのか分かりません。私はMVCのアイデアを初めて知りました。私はコントローラからビューへのデータベースクエリを渡し、ビューに結果を表示しようとしています。私が今やっているやり方は、 "undefined variable、sql" 。私はビューをロードするとき、これは私が持っているものです。コントローラから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']; 
    } 
    ?> 

(私はコントローラにそれをエコーし​​た場合、それは結果を表示)

A nyの助けが素晴らしいだろう... ありがとう!

答えて

15

いくつかのヒント〜

あなたの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. 
    } 
?> 
+0

あなたの 'login_model'でメソッドをもっと意味的に理解させる方法を見てください。それが何をするのかは明らかですが、簡単に拡張することができます。get_departments関数を書き換えてIDをパラメータとして取得し、特定の部門を返します。 IDなし?それらをすべて返す。 – Ross

+0

yea、それは意味があります...しかし、私はその1つの場所でそのクエリを使用するつもりなら、はるかに多くの仕事のように思えます...なぜ私はちょうどそれをコントローラに入れませんか? – Bill

+0

これは、MVCがどのように動作するか、むしろそのコンセプトになっているからです。あなたは*何もする必要はありません。しかし、ある日、別の関数やクエリを追加する必要がある場合はどうなりますか?コントローラーにもそれが入りますか? MVCに侵入することで、はるかに管理しやすいコードを作成することができます。 – Ross

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

あなたがで$配列を渡す必要が 私が何かわからない - 。>ロード - >ビューは、()は、それが入ってくるのパラメータをどのように扱いますか。

+0

これはどうか説明できますか? – benhowdle89

+0

マイ・ポストを更新しました。ごめんなさい。 – iBiryukov

+0

あなたはwhat - > load-> viewを表示できますか – iBiryukov

2

SQLクエリは、モデルで実行する必要があります。

安いニーモニックデバイス:モデルのD =データベース。コントローラーで

は、クエリの結果に$ 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; 
} 

:モデルで

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

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

を、あなたは実際のクエリを実行します$ 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> 

これはそれです!

+0

あなたはおそらく質問の周りの答えを構造化する必要があります。 – jondavidjohn

+0

コピーして貼り付けることは何も学ぶものではありません。私は一般的な例を掲載していますので、OPはそれを使用して実際にコードが何をしているかを理解することができます。 – Peter

+0

最後にモデルからデータを返す作業方法。 one up –

1

をそれはどちらかと思われますCIはあなたを混乱させているか、PHPを初めて使い慣れた人です。それらは単なる関数なので、そのような変数を渡すことはできません。

連想配列を渡すときには、キーを受け取り、それをネイティブPHP関数を使用して配列の値を持つ変数に変換します。ロスが言ったことはまさにあなたがしなければならないことです。

モデル:すべてのデータベースのもの コントローラー:ビュー ビューに変数を渡すためにモデルを使用しています:変数(ビューはその中の任意のSQLを持っていることはありません)

はまた、その結果に注意し、同じデータを持っているresult_array出力resultはオブジェクトを返し、result_arrayは連想配列を返します。

関連する問題