将 Cakephp 数据库字段增加一个值

Posted

技术标签:

【中文标题】将 Cakephp 数据库字段增加一个值【英文标题】:Incrementing Cakephp database field by a value 【发布时间】:2012-01-31 03:09:03 【问题描述】:

我有这个字段,我必须将字段值增加一个特定值。 我正在使用这个

$data['quantity']     = 'Order.quantity+1';

对我不起作用的数量是这里的整数列。 当数据库中没有任何内容时它也可以工作吗?。

问候 希曼舒·夏尔马

【问题讨论】:

您可以查看以下链接***.com/questions/7202256/… 【参考方案1】:

我在代码中使用了 updateAll 来增加文章中的浏览量。因此,每次访问文章时,我都会在文章控制器的视图操作中调用以下函数:

function incrementViewCount($id) 
    $this->updateAll(
        array('Article.viewed' => 'Article.viewed+1'),                    
        array('Article.id' => $id)
    );

然后在你的控制器中……

$this->MyModel->incrementViewCount(123);

与上一个答案中建议的教程基本相似。

【讨论】:

事实上这是无效的(至少它对我不起作用),我不得不这样做: return $this->updateAll( ["hits_count" => $this->query ()->newExpr("hits_count+1")], ["id IN" => $ids] );【参考方案2】:

您可以为此使用 updateAll()

一点谷歌搜索很快就会发现这一点: http://cakephp.1045679.n5.nabble.com/Auto-Increment-A-Field-td3491697.html

【讨论】:

恐怕这是不可能的,因为 updateAll 和 deleteAll 是唯一的原子方法,因此也是唯一可以使用这些字符串字段名称引用的方法。 我必须更正我之前的评论:deleteAll() 在 CakePHP 2.x 中也不是原子的。只有 updateAll() 是。【参考方案3】:

你也可以试试这个代码。适用于简单的 ++/-- 操作,无需额外查询。

https://gist.github.com/denchev/8209318

【讨论】:

【参考方案4】:

使用保存字段:

<?php

$this->Article->id = $id;
$this->Article->saveField('viewed', (int)$this->Article->field('viewed') + 1);

?>

【讨论】:

这会产生更多的查询和需要 - 此外,如上所述的原子查询将始终正确递增......您的可能不会。 是的,并不是说它是有效的。 :) 您能否将从字段调用返回的值转换为整数以确保增量? (用代码编辑) 问题在于它是非原子的,因此另一个进程可以在这个递增的同时递增“已查看”字段。在此过程中丢失一个增量。

以上是关于将 Cakephp 数据库字段增加一个值的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP:向表单添加字段(动态)

cakephp 没有将更新值保存到相关表,但没有错误

Cakephp:选择登录后要保存的数据

cakephp 从旧数据值 + 新值保存更新数据

将输入字段添加到所有表单中 - cakephp

CakePHP read() 函数读入的格式数据