增强spModel中的 incrField功能

#1 dhs789520

最近做小网站,遇到自行增加数据库变量值
因为两个字段都需要同时增加或减少
sql代码学的不精
看到incfField觉得很好用,只是不支持多字段同时增加
分两步走觉得效率又低
所以想改框架spModel中的 incrField功能
spClass('db_xx)->incrField($condition,array('id','times','total'));//同时增加多个字段
修改代码如下:
 
   public function incrField($conditions, $field, $optval = 1)
    {
        $where = "";
        if(is_array($conditions)){
            $join = array();
            foreach( $conditions as $key => $condition ){
                $condition = $this->escape($condition);
                $join[] = "{$key} = {$condition}";
            }
            $where = "WHERE ".join(" AND ",$join);
        }else{
            if(null != $conditions)$where = "WHERE ".$conditions;
        }

//对字段参数进行判断,分别处理
        if(is_array($field)){
            foreach($field as $key => $value){//因为对php的数组操作不熟,只会用key=>value,还是抄框架里的代码,呵呵
                $vals[] = "{$value} = {$value} + {$optval}";
            }
            $values = join(", ",$vals);
        }else{
            $values = "{$field} = {$field} + {$optval}";
        }


jake老大,你看这样改可行?

2011-04-27 11:57:31

#2 jake

已经回复你了,http://speedphp.com/bbs/redirect ... &pid=8328&fromuid=1

用继承来扩展是我给你的建议,不用一味地希望框架是什么样,既然有机制可以让你实现,就按机制走和做就行。

框架要考虑的,更多是怎么促进开发效率,满足最常用的开发功能,而一些小众的需求就不考虑,只提供继承的方式来改变。

为什么说是小众需求呢?你可以看到,修改三个字段或许用你的改后的函数可以,但是有没有想过,别人使用的时候,有可能会是这个字段+1,那个字段+2,怎么办?如果我要第三个字段=第一个字段+第二个字段,又要怎么样?这些平常遇不到的需求,真的要都支持吗?那这个框架会变成什么样?

写三行incrField就可以实现,没必要为了前面可以只写一行incrField而后面写一大堆处理代码。

这并不是很好的面向对象重用考虑。

2011-04-27 12:52:05

#3 dhs789520

嗯,谢谢jake老大的指教,佩服老大的工程学功底,呵呵

2011-04-27 12:59:53