CakePHP实现字段加1的几种方法

原文发表于 CakePHP中国 http://cakephp.cn/forum.php?mod=viewthread&tid=636&extra=page=1


举个例子,博客系统中,要统计每篇文章的阅读数,就要在每次显示文章时更新数据表的阅读数字段,使它加1。
但是CakePHP模型的save系列方法不支持 array('click'=>'click+1')。
以下的几种方法都不能正确的更新:
public function click($id) {
        $this->Post->id = $id;
        $this->Post->save(array('Post.click'=>'Post.click+1')); //错误
        $this->Post->save(array('Post.click'=>'`Post.click`+1')); //错误
        $this->Post->save(array('Post.click'=>'`Post`.`click`+1')); //错误
        $this->Post->save(array('Post.click'=>'click+1')); //错误
        $this->Post->save(array('Post.click'=>'`click`+1')); //错误
}


下面介绍几种方法:


1. 先读取再更新,缺点:要操作两次
public function click($id) {
        $this->Post->id = $id;
    $post = $this->Post->read();  //读取数据
        $this->Post->saveField('Post.click', $post['Post']['click']+1); //更新数据
}


2.利用Model::updateAll方法,缺点:不能调用beforeSave,afterSave
public function click($id) {
        $this->Post->updateAll(array('Post.click'=>'`Post`.`click`+1'), array('Post.id'=>$id));
}


3.利用SQL expression
public function click($id) {
        $this->Post->id = $id;
        $this->Post->saveField('click', $this->Post->getDataSource()->expression_r('`click`+1'));
}

转载于:https://my.oschina.net/cakephpchina/blog/115303

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值