2011-06-10 82 views
1

我明白MVC是做什麼的。但不夠深入。代碼點火器 - 我越想明白,我越陷入困惑

<?php 
class Orders_model extends CI_Model { 

     function __construct(){ 

       parent::__construct(); 
     } 
     private $table_name='orders'; 

     public function get(){ 


       $this->db->select('*'); 
       $this->db->from('orders'); 
       $this->db->join('orders_content', 'orders.oid = orders_content.oid'); 
       $query = $this->db->get(); 


       $data=array(); 
       foreach($q->result_array() as $orders){ 
       $data[$orders['orders.oid']] = $orders['orders_content.oid']; 
       } 

       return $data; 
     } 


} 

?> 

問題是我有兩個表:orders和orders_content。我不知道如果我可以只加入兩個表並調用數組來匹配,如果訂單的oid和orders_content的oid是相同的,然後顯示相關的數據。

在視圖/ product_order.php

<table cellpadding="3" cellspacing="0" width="686"> 
      <tr> 
      <th>Product ID</th> 
      <th>Title</th> 
      <th>Price</th> 
      <th>Qty</th> 

      </tr> 
      <?php foreach($orders as $orders){?> 
        <tr> 

        <td><?php echo $orders->product_id;?></td> 
        <td><?php echo $orders->title;?></td> 
        <td><?php echo $orders->price;?></td> 
        <td><?php echo $orders->quantity;?></td> 

</tr> 
      <?php }?> 

      </table> 

不知如何顯示我有orders.php上視圖的命令。因爲foreach $命令不能從唯一的訂單表正確嗎?我很抱歉,但是,我嘗試了一下希望快速學習的代碼點火器。 MVC再次讓我感到困惑。

編輯 一個問題:如何顯示product_order.php在瀏覽器上可見? 我更改了模型代碼 - 它看起來是否正確?

EDIT II 1)我正在尋求限制訂單隻有某些品牌。所以我想知道是否可以建立製造商表格連接?例如,製造商id = manfacturer名稱,然後僅向某個品牌顯示已售出產品的訂單。

2)Product_order.php是不可見的 - 我的意思是我嘗試了方法來查看頁面,看它是否有效,但沒有出現?

3)確定現在,我根據Daimsy

$data[$orders['orders.oid']] = $orders['orders_content.oid']; 

這行編輯的代碼是一個錯誤:致命錯誤:無法使用類型stdClass的的對象作爲陣列 爲什麼不能使用對象?

回答

0

我認爲你需要加入這兩個表並獲得結果作爲一個集合。嘗試做這在你的模型類:

$this->db->select('*'); 
$this->db->from('orders'); 
$this->db->join('orders_content', 'orders.oid = orders_content.oid'); 
$query = $this->db->get(); 
+0

感謝您快速回答..但我們不需要將兩個表格聲明爲私有? – joe 2011-06-10 10:19:49

+0

不,在codeigniter中,它可以從config文件夾中的database.php文件中找到它(我假設你已經配置了它) – 2011-06-10 10:30:16

+0

不,我還沒配置它。從我所看到的,我們必須在某處宣佈私人。我會弄清楚。感謝您的幫助。 – joe 2011-06-10 10:32:59

1

正如已經@Raza吉爾解釋說,你需要加入到表(LEFT JOIN)這樣的

$this->db->select('*'); 
$this->db->from('orders'); 
$this->db->join('orders_content', 'orders.oid = orders_content.oid'); 
$query = $this->db->get(); 

在你的模型,你需要而不是收集要傳遞給視圖的數據。你不這樣做的權利,因爲你正在做它有沒有意義的assignemnt(你把有沒有加入條款?)

它應該是這樣的:

$data =array(); 
foreach($q->result_array() as $orders) 
{ 
    $data[] = $orders; 
} 

return $data; 

繼MVC模式,您現在應該在CONTROLLER中檢索此數組($ data),然後處理傳遞到正確的視圖。

所以,在你的控制器,你應該有這樣的事情:

編輯控制器: 好,根據你的意見,你要調用product_order視圖。你不能直接這樣做。根據URL加載視圖(通常在控制器中,但不是強制性的),所以如果您希望在index.php/product_order處訪問頁面,則需要在控制器文件夾中有一個名爲product_order.php的文件。如果你沒有指定第二個URI段(就像你的情況),你需要使用默認功能index()。你的控制器是這樣,那麼:

class Product_order extends CI_Controller { 

    function index() 
    { 
     $this->load->model('orders_model'); // (I'm assuming you're not autoloading it. Otherwise, just skip the loading of this model); 
     $data['orders'] = $this->orders_model->get(); 
     $this->load->view('product_order',$data); 
    } 

} 

如果你在未來,要添加一個方法,說來查看特定的產品,你可以做'的index.php/product_order/view_product/20' 的例如,所以你必須:

  • product_order: - >控制器(product_order.php)
  • view_product: - >的控制器內的方法和
  • 20: - >的ID您選擇的產品必須傳遞給上述方法。像function view_product($id) { /....}。 Hope MVC越來越清晰。

// End edit;

您可以現在,在您看來「product_order.php」,收集陣列(CI中,提供給視數組的索引中omonimous變量轉化)在foreach,像你這樣的」重新做。但要小心,你稱它們爲對象,而你提供了一個關聯數組。所以它應該是這樣的:

<?php foreach($orders as $order) : ?> 
    <tr> 
    <td><?php echo $order['product_id']?></td> 
    <td><?php echo $order['title'];?></td> 
    <td><?php echo $order['price'];?></td> 
    <td><?php echo $order['quantity'];?></td> 
    </tr> 
<?php endforeach; ?> 

你的代碼會被罰款,如果你想使用$ Q->()的結果,而不是Q- $> result_array()

+0

@Damien Pirsy,謝謝你的詳細解釋。這對我來說是有意義的......所以我們不必將這兩個表格聲明爲私有的?它是如何從兩個連接表中獲取數據的?這是我的問題 – joe 2011-06-10 10:37:35

+0

@Josephine你爲什麼要這麼做?只需將表名稱傳遞給活動記錄及其良好,無需創建對象變量或其他任何東西。 CI如何獲得與其內部工作相關的數據,到目前爲止,您不應該擔心這個問題......或者我錯過了您的問題的要點? – 2011-06-10 10:42:09

+0

@Josephine這是使用框架的關鍵。它使用ActiveRecords(專門做數據庫操作的整個班級,所以你不必)。 HTTP://笨。com/user_guide/database/active_record.html – 2011-06-10 10:43:02

1

它看起來像你的看法有一個微妙的錯誤:你有:

<?php foreach($orders as $orders){?> <!-- nb. both variables are plural --> 

這應該是:

<?php foreach($prders as $order){?> <!-- nb. second variable is singular --> 

同理:

<td><?php echo $orders->product_id;?></td> 

現在必須:

<td><?php echo $order->product_id;?></td> 

你以前被改寫什麼$orders陣列周圍循環的第一時間,所以它不會正常工作。