主表能正常更新不会出现set ID = xxx,但更新从表时,生成的update语句 出现 set ID = xxx,导致更新失败,不知是我写的不对还是 bug?
如果不带ID过去语句就变成了insert显然不正确,在网络上翻了很多案例也都是传递ID过去的,不知道我错在哪了
建立一对多模型如下:
class SteelInspStdRelationModel extends RelationModel{
protected $tableName = 'rcl_steelinspstd_h';
protected $_link = array(
'rcl_steelinspstd_b' => array(
'mapping_type' => HAS_MANY,
'foreign_key' => 'MainID'
)
);
}
update方法 public function update(){
if(!IS_AJAX) halt("页面不存在");
$model = D('SteelInspStdRelation');
$data = json_decode2(I('data'));
$model->startTrans();
$result = $model->relation(true)->save($data);
if(!false==$result){
$model->commit();
$msg['success'] = 1;
$msg['msg'] = "成功!";
}else{
$model->rollback();
$msg['success'] = 0;
$msg['msg'] = "失败!";
}
//$this->ajaxReturn($msg,'json');
echo json_encode2($msg);
}
错误日志,用的是sqlsrv,存在编码问题,请无视SQL: UPDATE [tp_rcl_steelinspstd_b] SET [ID]=1,[InspItem]=85,[InspUOM]=1,[MinStdVal]='20.0000',[MaxStdVal]='30.0000',[Remark]='娴嬭瘯1' WHERE ( ID =1 ) [ RunTime:0.000495s ]
ERR: 8102:[Microsoft][SQL Server Native Client 10.0][SQL Server]无法更新标识列 'ID'。
[ SQL璇彞 ] : UPDATE [tp_rcl_steelinspstd_b] SET [ID]=1,[InspItem]=85,[InspUOM]=1,[MinStdVal]='20.0000',[MaxStdVal]='30.0000',[Remark]='娴嬭瘯1' WHERE ( ID =1 )
SQL: UPDATE [tp_rcl_steelinspstd_b] SET [ID]=2,[InspItem]=4,[InspUOM]=2,[MinStdVal]='10.0000',[MaxStdVal]='20.0000',[Remark]='娴嬭瘯2' WHERE ( ID =2 ) [ RunTime:0.000374s ]
ERR: 8102:[Microsoft][SQL Server Native Client 10.0][SQL Server]无法更新标识列 'ID'。
[ SQL璇彞 ] : UPDATE [tp_rcl_steelinspstd_b] SET [ID=2],[InspItem]=4,[InspUOM]=2,[MinStdVal]='10.0000',[MaxStdVal]='20.0000',[Remark]='娴嬭瘯2' WHERE ( ID =2 )
SQL: UPDATE [tp_rcl_steelinspstd_b] SET [ID]=16,[InspItem]=75,[InspUOM]=1,[MinStdVal]='1.0000',[MaxStdVal]='1.0000',[Remark]='' WHERE ( ID =16 ) [ RunTime:0.000413s ]
最佳答案
