如何简化codeigniter中的模型函数

时间:2017-09-01 09:43:08

标签: php mysql codeigniter

我创建了一个通用模型函数来从Mysql中获取数据。我可以将此功能用于所有选择数据。

//Controller

$where = array('user_id' => 1);
$data['all_rewards'] = $this->select->selectData('tbl_example1', $where, null, 'user_id', 10, 1);

//Model

public function selectData($table, $where, $group_by, $order_by, $limit, $start) {
    $this->db->select('*');
    $this->db->from($table);
    if(!empty($where))
        $this->db->where($where);
    if(!empty($group_by))
         $this->db->group_by($group_by);
    if(!empty($order_by))
        $this->db->order_by($order_by, 'DESC');
    if(!empty($limit) or !empty($start))
        $this->db->limit($limit, $start);

    $query = $this->db->get();

    return $query->num_rows() > 0 ? $query->result_array() : 0 ;
}

上面的代码工作正常。

我想知道除了我的函数之外还有任何简化的方法来从数据库中选择数据。我的方法是否正确。

1 个答案:

答案 0 :(得分:1)

一旦您的应用程序开始增长,我不确定这种方法是否能够存活下来。很快您就会遇到一些选择查询,这些查询无法通过您的通用功能实现(例如,如果您需要选择'或仅选择某些字段而不是(*)) 。

事实上,这是一个关于如何创建一个好的MVC架构的广泛问题。

稍微好一些的方法不是试图编写一个能满足所有可能的select语句的通用函数,而是尝试为典型的简单查询编写速记函数,如SelectAll或SelectOne或SelectRow。

通常,Model应该实现一种访问系统中模型所代表的特定数据或db表的方法。如果您希望概括查询,请考虑扩展CodeIgniter查询构建器,并根据需要使用模型中的扩展功能。

比如说,你需要一个从表中获取单个字段的简写:

function selectOne($table, $field, $id){
    $this->db->select($field);
    $this->db->from($table);
    $this->db->where('id', $id);
}

这个函数调用将是非常易读和自我记录的:

selectOne('product', 'price', 5);

通过这种方式,您可以抽象出许多在应用程序中获取数据的典型方法。