将参数和条件传递给codeigniter中的模型

时间:2010-05-06 16:03:26

标签: codeigniter models

我正在为项目添加一些模型,并且想知道是否有一种“最佳实践”方法来创建模型:

为每个特定查询创建函数是否有意义?

我开始这样做,然后有了创建一个我可以传递参数的通用函数的想法。 e.g:

而不是

function getClients(){
    return $this->db->query('SELECT client_id,last FROM Names ORDER BY id DESC');
    }
    function getClientNames($clid){
        return $this->db->query('SELECT * FROM Names WHERE client_id = '.$clid);
    }
    function getClientName($nameID){
        return $this->db->query('SELECT * FROM Names WHERE id ='.$nameID);
    }
}

这样的东西
function getNameData($args,$cond){
    if($cond==''){
        $q=$this->db->query('SELECT '.$args.' FROM Names');
        return $q;
    }else{
        $q=$this->db->query('SELECT '.$args.' FROM Names WHERE '.$cond);
        return $q;
    }
}

我可以将字段和条件(如果适用)传递给模型。有没有理由后一个例子是个坏主意?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为使用CI的Active Record来编译查询实际上是一个更好的主意。

一个例子:

function all_clients($select)
{
    $this->db->select($select);

    return $this->_get_client_data();
}

function single_client($select, $id = "")
{
    // validate $id

    $this->db->select($select);
    $this->db->where("id", $id);
    $this->db->limit(1);

    return $this->_get_client_data();
}

// Only called by a method above once the query parameters have been set.

private function _get_client_data()
{
    $q = $this->db->get("clients");

    if($q->num_rows() > 0)
    {
        return $q->result_array();
    }

    return FALSE;
}

CI的Active Record使您想要的所有内容变得更加容易。您可以设想在实际调用$this->db->get()之前设置公共函数以有条件地设置多个选项。

我想你会把_get_client_data称为全能(?)并通过单一方法运行所有数据检索,使错误处理等内容更容易维护。

注意:请务必记住验证此类数据。我知道你这样做,但我只是重复一遍。