我的代码是这样的:
$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];成功入库了!
最佳答案