Codeigniter使用不同的函数where子句

时间:2014-01-16 17:36:42

标签: php codeigniter postgresql

我有一个Postgres数据库,其中包含orders表和一个表order_contents,其中包含orderorder_id的所有项目。我正在尝试使用订单历史记录。

在我的模型中,我有两个函数,一个用于检索订单,另一个用于检索订单的所有内容,如下所示:

function retrieve_orders($userID){
    $query = $this->db->get('orders');
    $this->db->where('user_id', $userID);
    return $query->result_array();
}

function get_order_contents($orderID){
    $query = $this->db->get('order_contents');
    $this->db->where('order_id', $orderID);
    return $query->result_array();
}

所以在我的控制器中,我调用retrieve_orders()并将结果数组传递给视图。在视图中,我想为每个订单创建一个HTML表格及其所有内容。所以我遍历每个订单并在循环中调用get_order_contents。

一切都应该有效,但是这个错误会出现在源中:

  

错误编号:

错误:列“user_id”不存在   第3行:在哪里“user_id”='3'                 ^

SELECT *   来自“order_contents”   在哪里“user_id”='3'

正如您所看到的,出于某种原因,当我在视图中调用get_order_contents()时,它使用我为retrieve_orders()函数指定的where子句。

到目前为止我所做的是尝试手动停止缓存,但无济于事。感谢您的任何帮助。

3 个答案:

答案 0 :(得分:1)

在每个函数中,尝试在get()之前放置where()。

当你尝试get()order_contents时,它将使用之前where()的where子句。

通常的做法是,在其他调用(例如where()等)之后,在$ this-> db的最后一次调用时使用get()。请参阅codeigniter中的Active Record文档。

答案 1 :(得分:0)

像这样链接你的数据库函数

return $this->db->where('user_id', $userID)
                ->get('orders')
                ->result_array();

答案 2 :(得分:0)

为什么不使用$this->db->get_where()