ThinkPHP 3.1.3关联更新,从表update语句更新主键ID导致更新失败不解

浏览:1817 发布日期:2014/08/12 分类:求助交流 关键字: 关联更新 一对多 从表更新

主表能正常更新不会出现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 ]
最佳答案
评论( 相关
后面还有条评论,点击查看>>