spModel中的一点疑问

#1 SunPSP

之前都是直接拿着SP就做东西去了,几乎没有关注过SP的代码具体是怎么写的,最近空下来想到研究下SP

1.昨晚上看了下spModel,发现findAll()虽然包含了LIMIT参数,但是在方法中组装SQL的时候并没有用到LIMIT参数
而是在MYSQL驱动中另外写了个setlimit()方法,然后在findAll()中调用来实现findAll()结果的LIMIT
想了很久没明白为啥要这么处理,有啥好处不
貌似setlimit()也就是在组装完成的SQL后面接上一个LIMIT啊

2.在MYSQL驱动中看到J大重写了SQL的执行方法,SP中用的都是重写后的exec()方法而不是mysql_query()
我记得我之前一个项目中曾经直接在表模型中用exec()来执行SQL,貌似不成功,换用runSql()就可以
而在spModel中,runSql()貌似就是直接返回exec()的,这个真心很不解
由于时间关系当时没多想直接换回runSql()就过去,回头就忘了
现在看到了立马又想起来了,不知道是什么原因,望解惑

2013-09-06 06:07:52

#2 jake

1. setlimit是为了匹配mssql数据库,它没有limit语法,只有top,所以要把limit抽出来单独做封装。

2. spModel里面没有方法叫exec,那是它的成员变量_db的方法,spModel是通过runSql来组合_db的exec方法,可以看作两者是同一个东西,只不过调用的方式有些不同(见下面)。这是为了runSql可以被继承改写而准备的。

spModel->runSql() = spModel->_db->exec()

2013-09-06 08:32:27