关于关联模型save/add/del操作中的一个bug

浏览:1080 发布日期:2015/03/23 分类:技术分享 关键字: BUG
TP 版本: 3.2.3

BUG描述:多对多表关联时,对中间表的插入和修改操作时,当插入的id大于10时出现错误

BUG还原:

表关系://产品表
create table dj_product (
      id int primary key auto_increment,
      ...
);
//目的地表
create table dj_product_destination (
      int primary key auto_increment,
      ...
);
//产品目的地中间表
create table dj_product_with_destination (
      int primary key auto_increment,
      destination_id int,
      product_id int
);
定义关联模型//省略包名及导入类库
class ProductModel extends RelationModel{

    Protected $tableName = 'dj_product';  //主表名
        Protected $_link = array(
                'dj_product_destination' => array( //目的地
            'mapping_type'  => self::MANY_TO_MANY,    
        'foreign_key'   => 'product_id',
        'relation_foreign_key' => 'destination_id',
        'relation_table' => 'dj_product_with_destination',

        ), 
       );
}
定义action//省略包名及导入类库
class ProductController extends Controller {
         public function addProduct($product_id = 0){
                    D('Product')->Relation(true)->where(array('id'=>$product_id))->save($_POST);
         }
}
发送请求
http://servername/modulename/Product/addProduct.html
post表单参数:product_id=1&dj_product_destination[]=9&dj_product_destination[]=19

最后数据库保存的结果select * from dj_product_with_destination;

id,     destination_id,    product_id
1       1                         1
2       9                         1
BUG 原因 :

RelationModel.class.php 第337行 至 342行 有问题                                    if(is_array($mappingData)) {
                                        $ids   = array();
                                        foreach ($mappingData as $vo)
                                            $ids[]   =   $vo[$mappingKey];
                                        $relationId =   implode(',',$ids);;
                                    }
此段拼接关联表(dj_product_destination)id 出错。

当id大于10时,$relationId结果异常。

最佳答案
评论( 相关
后面还有条评论,点击查看>>