我正在为项目添加一些模型,并且想知道是否有一种“最佳实践”方法来创建模型:
为每个特定查询创建函数是否有意义?
我开始这样做,然后有了创建一个我可以传递参数的通用函数的想法。 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;
}
}
我可以将字段和条件(如果适用)传递给模型。有没有理由后一个例子是个坏主意?
谢谢!
答案 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
称为全能(?)并通过单一方法运行所有数据检索,使错误处理等内容更容易维护。
注意:请务必记住验证此类数据。我知道你这样做,但我只是重复一遍。