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

[版本 3.x] ci框架 model 层封装问题, 急急急!

[复制链接]
发表于 2016-8-19 16:54:51 | 显示全部楼层 |阅读模式
比如一个表有name , id ,age
select  name,age  from  user where  age = 5  name like '%张%' order by id desc  limit 0 10
如果要实现这类 语句 想变成 下面形式 该怎么封装 (成员方法名叫getAllByWhere)
SELECT {$fields} FROM {$this->_table} WHERE  {$where} LIMIT {$offset}, {$num}
打个比方
public function getSomeFieldsByWhere($where, $fields, $num, $offset){
               
}
如果用 Active Record 中间怎么写,需要防注入, 谢谢了
发表于 2016-9-9 09:12:19 | 显示全部楼层
本帖最后由  喜剧之王  于 2016-9-9 09:13 编辑

我在想一个问题 如果你要写那么多参数,还封装成方法干什么? 链式查询不就是封装好的方法么,

public function page($data = array()){
if (!empty($array['where'])) {
            $this->db->where($array['where']);
        }
if (!empty($array['like'])) {
            $this->db->like($array['like']);
        }
}

这样子就可以哈,你只需要在DATA里穿你需要的参数就行,然后MODEL做个判断,
这样子 你只需要 page(array('where'=>array(1=>1))) 随你传几个参数 都能用, 有些需要自己改良一下~
发表于 2016-8-25 16:17:31 | 显示全部楼层
张三的歌 发表于 2016-8-25 16:07
这样是可以了,那要是再加上like , order, group 这三的话,参数会增加大概6个,目前是4个,加起来是10个.... ...

一個一個參數丟,比較偏功能取向
就是我這個方法,要達到一個目的,例如 : 登入檢查

你也可以彈性取向,方法直接承接一個大的 $data
然後 Model 裡面再檢查這個 $data 有沒有某個 key 值,是不是陣列等等

當然還有另外一種是資料表取向
一個 Model 管一個資料表
使用公域 $this->table 來取值
調用給該 Model 各個方法使用

程式語言有很多種設計模式
可以去多看看,你會發現不一樣的世界

 
发表于 2016-8-23 16:26:06 | 显示全部楼层
public function getSomeFieldsByWhere($where, $fields, $num, $offset){
        $this->db->select($fields)
        ->where($where)
        ->limit($offset, $num)
        ->get($this->_table);   
}

这样不就行了么
发表于 2016-8-20 12:05:32 | 显示全部楼层
你这么写是不是太麻烦
 楼主| 发表于 2016-8-22 09:12:01 | 显示全部楼层
Aloghli 发表于 2016-8-20 12:05
你这么写是不是太麻烦

有什么好的写法吗,能写个样子吗,谢谢了
发表于 2016-8-22 09:19:36 | 显示全部楼层
张三的歌 发表于 2016-8-22 09:12
有什么好的写法吗,能写个样子吗,谢谢了

你去下载MY_Model  这是已经封装好的
 楼主| 发表于 2016-8-22 14:47:50 | 显示全部楼层
Aloghli 发表于 2016-8-22 09:19
你去下载MY_Model  这是已经封装好的

在哪里下载呀
发表于 2016-8-22 15:44:19 | 显示全部楼层

github
 楼主| 发表于 2016-8-23 10:30:10 | 显示全部楼层

具体的 github 的地址有没有呀,谢谢了
 楼主| 发表于 2016-8-23 10:30:12 | 显示全部楼层

具体的 github 的地址有没有呀,谢谢了
发表于 2016-8-23 16:24:00 | 显示全部楼层
为什么不用链式查询呢?

本版积分规则