修复了在 MANY_TO_MANY下 会清空 中间表的BUG
需要修改文件
ThinPHP/Extend/Model下面的RelationModel.class.php,
在192行把:
$sql ="SELECT b.{$mappingFields} FROM {$mappingRelationTable} AS a,".$model->getTableName()." AS b WHERE a.{$mappingRelationFk} =b.{$model->getPk()} AND a.{$mappingCondition}";
替换成:
$sql ="SELECT b.{$mappingFields} FROM".C('DB_PREFIX')."{$mappingRelationTable} AS a,".$model->getTableName()." AS b WHERE a.{$mappingRelationFk} =b.{$model->getPk()} AND a.{$mappingCondition}";
在345行把:
// 删除关联表数据
$this->table($mappingRelationTable)->where($mappingCondition)->delete();
// 插入关联表数据
$sql = 'INSERT INTO '.$mappingRelationTable.'('.$mappingFk.','.$mappingRelationFk.') SELECTa.'.$this->getPk().',b.'.$model->getPk().' FROM'.$this->getTableName().' AS a ,'.$model->getTableName()." AS bwhere a.".$this->getPk().' ='. $pk.' AND b.'.$model->getPk().' IN('.$relationId.") ";
替换成:
$thisModel = M($mappingRelationTable);
$thisModel->where($mappingCondition)->delete();
$map = C('DB_PREFIX').$mappingRelationTable;
$sql = 'INSERT INTO '.$map.' ('.$mappingFk.','.$mappingRelationFk.') SELECTa.'.$this->getPk().',b.'.$model->getPk().' FROM'.$this->getTableName().' AS a ,'.$model->getTableName()." AS bwhere a.".$this->getPk().' ='. $pk.' AND b.'.$model->getPk().' IN('.$relationId.") ";
在367行把:
$result = $this->table($mappingRelationTable)->where($mappingCondition)->delete();
替换成:
$thisModel =M($mappingRelationTable);
$result=$thisModel->where($mappingCondition)->delete();
这样就行了.
在关联模型中 relation_table中间表时不用带表前缀了.
这里附上修改好的完整有RelationModel.class.php
一铭小站原创文章所属权归 www.shayiming.cn所有转载请注明出处: http://www.shayiming.cn/12-31-317.html