我只想知道代码结构和Codeigniter查询构建器工作的性能。
我创建了My_model()
public function select_products_from($table, $limit = 0) {
$this->db->select('*');
$this->db->from($table);
if(!empty($limit)){ $this->db->limit($limit);}
$this->db->where(array('status' => 1));
$this->db->order_by('viewed', 'desc');
$dat a= $this->db->get();
$this->db->close();
return $data;
}
在我的控制器中
private function dataProducts () {
$this->load->model('main/products/Products_model');
return $this->Products_model->select_products_from('products')->result();
}
public function sendView (){
$this->data['products'] = $this->dataProducts();
Render->$this->view('products',$this->data);
}
用法,我想使用多种方法
return $this->Products_model->select_products_from('products')->last_row()
->first_row()
->last_row()
->next_row()
->previous_row()
->first_row()
->.....
答案 0 :(得分:1)
在结构上,我强烈希望将查询的结果返回给控制器,而不是查询本身。这样,所有与数据库相关的东西都可以很好地划分到模型中,同时还可以处理错误并处理特殊情况。
例如,如果您的数据架构发生了变化,那么此更改的效果将会影响整个程序。如果返回一个简单的行数据数组,则可以确保模型仍然返回控制器可以使用的内容。
请注意,您可以将每个结果行作为数组或对象返回,甚至可以将行作为您定义的类的实例。在这个小片段中,当没有结果时,它返回null
;你可以在你的上下文中返回一个空数组或任何有意义的数组:
$result = null;
<all the stuff to set up your query>
$query = this->db->get();
if ($query->num_rows() > 0) {
$result = $query->result();
}
return $result;
在你的控制器中,你有一个对象数组,你可以使用所有php的数组函数来随心所欲地玩它。无论您对数据库做什么,该部分都不会受到影响。