用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2020|回复: 7
收起左侧

[版本 3.x] model类如何写才能实现真正的MVC??在换成mongodb时不动C和V层???

[复制链接]
发表于 2016-8-19 09:30:06 | 显示全部楼层 |阅读模式
本帖最后由 张三的歌 于 2016-8-19 09:32 编辑

以下代码都是在model层的东西
public function getSomeFieldsByWhere($where, $fields, $num, $offset){
                $sql = "SELECT {$fields} FROM {$this->_table}  {$where} LIMIT {$offset}, {$num}";
                //die($sql);
                $query = $this->db->query($sql);
                $res = $query->result_array();
                return $res;
        }

上面这种肯定是不防止注入的,但是用起来方便,因为where里面可以随便写,比如order by , group by, like等等

public function getAllFieldsByWhere($fields,$where=array(),$num,$offset){
                //字段
                $this->db->select($fields);
            $query = $this->db->get_where($this->_table, $where,$offset,$num);
            return $query->result_array();
        }
而这种发放有局限性,因为where里面不能写很多东西,只能写查询的字段,但是如果加上了$this->db->like这种东西,参数会有7-9个

有没有一种方法参数传递的少,还能够很自由的传递参数

有人说重构query buider但是我不知道这个在哪里,怎么重构
谢谢了
发表于 2016-8-19 09:36:29 | 显示全部楼层
$this->db->where()
本身就可以传数组或者字符串的
例如
$where = "name='Joe' AND status='boss' OR status='active'";
$this->db->where($where);
发表于 2016-8-19 14:16:24 | 显示全部楼层
楼主可以用用 ORM。。。
 楼主| 发表于 2016-8-19 16:37:06 | 显示全部楼层
liugoe 发表于 2016-8-19 09:36
$this->db->where()
本身就可以传数组或者字符串的
例如

是的,但是不可以传
order by  id  desc  这样的东西 如果想传,我还需要加参数,那么传参数就需要7-9个就不便捷了
 楼主| 发表于 2016-8-19 16:42:23 | 显示全部楼层
Hex 发表于 2016-8-19 14:16
楼主可以用用 ORM。。。

感觉那个稍稍有点看不懂......
发表于 2016-8-21 13:38:38 | 显示全部楼层
张三的歌 发表于 2016-8-19 16:42
感觉那个稍稍有点看不懂......

其实我个人比较喜欢直接写 SQL,因为这样可以更清楚我要做什么事情。
 楼主| 发表于 2016-8-22 09:13:00 | 显示全部楼层
Hex 发表于 2016-8-21 13:38
其实我个人比较喜欢直接写 SQL,因为这样可以更清楚我要做什么事情。

原始的语句,如果写在控制器层的话,不利于分开
发表于 2016-8-22 11:32:00 | 显示全部楼层
张三的歌 发表于 2016-8-22 09:13
原始的语句,如果写在控制器层的话,不利于分开

当然不能写到控制器里。写在模型里。

本版积分规则