在调用每个模型时,使用Codeigniter结果方法是否更好?

时间:2016-07-20 07:54:40

标签: php codeigniter

我只想知道代码结构和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()
            ->.....

1 个答案:

答案 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的数组函数来随心所欲地玩它。无论您对数据库做什么,该部分都不会受到影响。