关于ThinkPHP框架addAll()方法的设计问题填坑
我的课堂代码是这样写的:
因为为了获取数据方便我的$allGoods是使用goods_id来索引的,错误就出在这儿但是让我恨不能理解,让我们一一道来。
我的$allGoods的结构是这样的
查看其它都没有问题的情况下唯一可能出错的就是数据的索引方式了,难道TP只能使用从0开始索引的二维数组?这让我很不能理解,作为一个框架应该考虑到通用性,所以翻看了TP中mysql驱动里关于insertAll()的实现,因为model中的addAll()就是调用驱动里的insertAll()实现的:
所以就是这样了!
问题就出在对于$dataSet[0]的判断中!顿时心中千军万马奔腾而过,作为框架如果非要这样操作为什么不先对$dataSet重写索引后来处理呢?好吧,我要改,我要改框架!-_-
框架修改方式。打开Library/Think/Db/Driver/Mysql.class.php找到insertAll方法修改如下
public function insertAll($dataSet,$options=array(),$replace=false) {
$values = array();
$this->model = $options["model"];
$firstRow = array_shift($dataSet); //取出传入数组的第一条数据
if(!is_array($firstRow)) return false; //根据框架的思想进行简单的数组判断
$dataSet[] = $firstRow; //重新赋值到待写入数组的元素中
至此,问题解决。最后,ThinkPHP官方已经致力于开发ThinkPHP5了,ThinkPHP3.2.3的维护生命周期已经结束了,所以还在使用ThinkPHP3.2.3作为开发框架的公司只能靠自己了。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。