我有一个Postgres数据库,其中包含orders
表和一个表order_contents
,其中包含order
和order_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子句。
到目前为止我所做的是尝试手动停止缓存,但无济于事。感谢您的任何帮助。
答案 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()