关于addAll()失败的问题;

浏览:5218 发布日期:2014/12/08 分类:技术分享 关键字: addAll
TP的addAll()方法对于批量的添加确实很好用,不过昨天出问题了.
我的代码是这样的:$db_pd_md=M('WorkProductMd');
            if (is_array($data_md)) {
                $data_md=arrSort($data_md);
                $db_pd_md->where('product_id='.$pd_id)->delete();//删除原有半成品配料
                $res_md=$db_pd_md->addAll($data_md);
            }

            $db_pd_pm=M('WorkProductPm');
            if (is_array($data_pm)) {
                $data_pm=arrSort($data_pm);
                $db_pd_pm->where('product_id='.$pd_id)->delete();//删除原有耗材配料
                $res_pm=$db_pd_pm->addAll($data_pm);
            }
看起来问题不大,我这个是产品与半成品,耗材的关系表,没有主键;添加失败了,后来看讨论,有人说是覆盖的问题,可是我之前有做delete()先删除相关的数据,所以不是那个问题.后来仔细看了一下TP addAll()的源代码,终于发现问题所在:// 写入数据到数据库
        $result = $this->db->insertAll($dataList,$options,$replace);
这里用到insertAll()方法.public function insertAll($datas,$options=array(),$replace=false) {
        if(!is_array($datas[0])) return false;
对于传入的数组先判断$datas[0],可是我传入的数组下标都是以时间戳为下标的,所以执行到这步就直接返回false,导致添加失败.
改进措施是对我要加入的数组先修改下标.而且要有[0];成功入库了!
最佳答案
评论( 相关
后面还有条评论,点击查看>>