ThinkPHP 3.2.3 版 table方法切换表之后,无法save

浏览:1739 发布日期:2016/05/27
3.2.3 - 严重 - 未处理
在Model里面使用了table方法切换表名,无法save,其他增删查都OK    //无法save
    $data['clicknum'] = 800;
    $res = $this->table('shop_goods')->where('id=1')->save($data);
$res结果直接是false;
找了下原因,是因为$data里面的数据被过滤掉了。

调用table方法后去select会执行字段查询语句:SHOW COLUMNS FROM `shop_goods`;
但是调用table方法后使用save却没有去查询这个shop_goods表的字段,所以Model类里面的 $this->fields 还是上一个表的字段,两表之间字段不匹配,就将数据过滤掉了。


临时解决方案:
在模型里面用M('goods')函数实例化shop_goods表(就是不用table切换表名了);    $data['clicknum'] = 800;
    $goods = M('goods');
    $res = $goods->where('id=1')->save($data);
或者在save方法前面调用field()方法,将需要更新的字段指定一下;    $data['clicknum'] = 800;
    $res = $this->table('shop_goods')->field('clicknum')->where('id=1')->save($data);
再或者在Model基类里面,处理数据之前,将该表的字段查出来赋值给$this->fields;(不推荐)

评论(
后面还有条评论,点击查看>>