2011-06-10 81 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阵列周围循环的第一时间,所以它不会正常工作。