2016-10-10 6 views
1

モデルから配列をフェッチしてビューに送信するコントローラがあります。サンプルテーブルコードシニターでビューに送信されたデータに応じてビュー内でモデル関数を実行します

user id user name user email 
1   Mike   [email protected] 
2   Tom   [email protected] 

は今、私はこの

user id user name  user email 
1   Mike    [email protected] 
order:10 order total:50 order date: 2016-09-12 
order:12 order total:100 order date: 2016-09-14 
2   Tom    [email protected] 
order:15 order total:80 order date: 2016-09-13 
order:16 order total:120 order date: 2016-09-14 
order:17 order total:140 order date: 2016-10-10 

コントローラのインデックス()関数のように見えるように、そのテーブルには、各ユーザーのために別のテーブルからデータを別の配列を取得するために、モデルに別の機能を追加しましたこのコードが含まれています

$this->data['users'] = $users; //fetches data from a model function 
$this->data['content'] = $this->load->view('users_view', $this->data); 

私は関数order($ user_id)を使用して、ユーザーのDBから注文を取得します。ビューコード:

<table> 
     <tr> 
      <th> 
       <?php echo 'user id';?> 
      </th> 
      <th> 
       <?php echo 'user name';?> 
      </th> 
      <th> 
       <?php echo 'user email';?> 
      </th>   
     </tr> 
     <?php foreach($users as $val){ 
      ?> 
      <tr> 
       <td> 
        <?=$val->user_id?> 
       </td> 
       <td> 
        <?=$val->user_name;?> 
       </td> 
       <td> 
        <?=$val->user_email;?> 
       </td>     
      </tr> 
     <?php  
     // how to call the model function here and loop through the orders array to 
display orders for each user? 

     }?> 

    </tbody> 
</table> 
+0

お客様IDでご注文ください。各顧客IDを指数とする注文の多段階配列を構築する。それをビューに渡します。顧客IDを使用して、一致する注文を表示します。 – cartalot

+0

OKこれで、コントローラーに多次元配列を作成する方法がわかりました。私はcodeigniterを学び始めて、必要に応じて多次元配列を構築するのに十分なチュートリアルを見つけられません。助けてくれてありがとう –

答えて

1

ユーザ名(order_username)、ユーザID(order_userid)、ユーザ電子メール(order_useremail)など、他のテーブルと共通のインデックスキーを持つようにインデックスを作成する必要があります。ユーザーID /電子メール。

が、これはあなたのコントローラであると言う:

class MY_Controller extends CI_Controller 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
     //Load My_Model 
     $this->load->model("my_model"); 
    } 


    public function index() 
    { 
     $users = $this->my_model->get_users(); 
     foreach ($users->username as $user) { 
      $user_orders = $this->my_model->get_orders_by_username($user); 
     } 
     $this->load->view('users_view', array("user_orders" => $user_orders, "users" => $users)); 
    } 
} 

そして、これは共通で、同じユーザー名とユーザーテーブルと受注テーブルからデータを取得し、あなたのモデルです:今

class MY_Model extends CI_Model 
{ 
    public function get_users() 
    { 
     $results = $this->db->get('users'); 
     return $results; 
    } 

    public function get_orders_by_username($user) 
    { 
     $this->db->select('*'); 
     $this->db->where("order_username", $user); 
     $results = $this->db->get('orders'); 
     return $results; 
    } 
} 

あなたはビューファイル内のデータを見ることができ、 $ users-> username - $ users->電子メールのように、またはforeachループのように使用することができます:

foreach ($users as $user) { 
    foreach ($user_orders as $order) { 
    echo "$user->user_name , $user->user_lastname - $user->user_email"; 
    echo "$order->orders_date - $order->orders_count"; 
    } 
} 
+0

私は注文のモデル機能を単純に変更し、それに渡されたユーザーIDのユーザー名だけを表示しましたが、最初のユーザーを各行で繰り返し、各ユーザーの正しいユーザー名を取得しません。 –

+0

多分あなたの関数が指定されたデータを表示するためのパラメータを受け入れないので、あなたの関数コードを表示してください。 –

2

あなたは間違いなくこれをしないでください。これは完全に間違っています。これは、それが行われるべきかです:

  • コントローラをコントローラに

    1. リクエストは、コントローラがビュー

    にデータをだからあなたのコントローラに必要な送信

  • 一緒にデータを取得するために、関連のライブラリとモデルを呼び出し、あるモデルからユーザーのためにデータを呼び出し、foreachユーザーは別のモデルから注文を受け取ります。あなたのモデルやライブラリでこれを行う方法は当然のことですが、コントローラはすべての必要なデータを収集する必要があります。

    ビューの構築では、コントローラ、テンプレートライブラリ、またはページモデルが、ページのチャンク、モジュール、またはページのセクションを設定するために、他のサブビューまたはパーシャルを呼び出すことがあります。次に、これらの文字列をメインビューの一部として使用します。またはメインビューで直接他のビューを呼び出すことがあります。いずれにしても、ビューに必要なデータをビューに送信する必要があります。他の部分(私が個人的に嫌いだが一部の人々はそれを好むように見える)を呼び出すビューの場合、すべてのデータが元のビューに送信され、部分データには元のデータセットのサブセットとして必要なデータのみが送信されます。

    ビューは、モデル、他のコントローラ、またはライブラリを決して呼び出してはなりません。それらを単純な生データを受け取り、そのデータをどのように表示するかを指示する、ページデザインの静的要素と考えてください。それだ。

    コントローラやモデルにHTMLを持たないように、foreachループ、if文などのレイアウト構成を除き、ビューでPHP処理を行うべきではありません。

  • 関連する問題