thinkphp 3.2 join更新BUG?

浏览:967 发布日期:2016/11/15 分类:求助交流 关键字: bug thinkphp 3.23 求助 讨论
开始我这样写$k=6;
$save=array('d.update_time'=>time(),'agl.is_change'=>1,'do.depot_check'=>0,'do.depot_check_remark'=>'');
$model=M('AdmitGoodsLog')->alias('agl')->join('__DOCUMENT__ AS d ON agl.doc_id=d.id')->join('__DOCUMENT_ORDERS__ AS do ON agl.doc_id=do.id');
$model->fetchSql(true)->where(array('agl.id'=>$k))->save($save);
发现返回false,没有返回SQL语句,找到原因是因为save里面的字段被过滤了,解决如下:
加入field$field='d.update_time,agl.is_change,do.depot_check,do.depot_check_remark';
$model->field($field)->fetchSql(true)->where(array('agl.id'=>$k))->save($save);
查询后返回UPDATE jc_admit_goods_log agl SET d.update_time='1479175092',agl.is_change='1',do.depot_check='0',do.depot_check_remark='' WHERE agl.id = 6;join并没有加进去
找原因。。
看到这一句$table  =   $this->parseTable($options['table']);
$sql   = 'UPDATE ' . $table . $this->parseSet($data);
if(strpos($table,',')){// 多表更新支持JOIN操作
    $sql .= $this->parseJoin(!empty($options['join'])?$options['join']:'');
}
好吧,我加一个table,最终代码如下$k=6;
$save=array('d.update_time'=>time(),'agl.is_change'=>1,'do.depot_check'=>0,'do.depot_check_remark'=>'');
$field='d.update_time,agl.is_change,do.depot_check,do.depot_check_remark';
$model=M('AdmitGoodsLog')->table('__ADMIT_GOODS_LOG__ agl,__DOCUMENT__ ,__DOCUMENT_ORDERS__')
            ->join('__DOCUMENT__ AS d ON agl.doc_id=d.id')
            ->join('__DOCUMENT_ORDERS__ AS do ON agl.doc_id=do.id');
$model->field($field)->fetchSql(true)->where(array('agl.id'=>$k))->save($save);
最后生成的SQL语句为UPDATE jc_admit_goods_log agl,`jc_document`,`jc_document_orders` SET d.update_time='1479175370',agl.is_change='1',do.depot_check='0',do.depot_check_remark='' INNER JOIN jc_document AS d ON agl.doc_id=d.id INNER JOIN jc_document_orders AS do ON agl.doc_id=do.id  WHERE agl.id = 6但是这个SQL语句是错的,根本执行不了,求给个方法,我就想连表更新下。。。。要怎么做(不修改官方代码的情况下)
最佳答案
评论( 相关
后面还有条评论,点击查看>>