按值递增Cakephp数据库字段

按值递增Cakephp数据库字段,cakephp,cakephp-1.3,Cakephp,Cakephp 1.3,我有一个字段,它的值我必须用一个特定的值来增加字段值。 我在用这个 $data['quantity'] = 'Order.quantity+1'; 这对我不起作用,这里的数量是一个整数列。 当数据库中没有任何内容时,它也会工作吗 问候 Himanshu Sharma您可以使用updateAll()进行此操作 谷歌搜索一下,很快就能发现这一点: 我在代码中使用updateAll来增加文章中的视图。因此,每次访问文章时,我都会在我的文章控制器中从我的视图操作中调用以下函数: functio

我有一个字段,它的值我必须用一个特定的值来增加字段值。 我在用这个

$data['quantity']     = 'Order.quantity+1';
这对我不起作用,这里的数量是一个整数列。 当数据库中没有任何内容时,它也会工作吗

问候 Himanshu Sharma

您可以使用updateAll()进行此操作

谷歌搜索一下,很快就能发现这一点:

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

function incrementViewCount($id) {
    $this->updateAll(
        array('Article.viewed' => 'Article.viewed+1'),                    
        array('Article.id' => $id)
    );
}
然后在你的控制器里

$this->MyModel->incrementViewCount(123);
基本上类似于上一个答案中建议的教程。

使用保存字段:

<?php

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

?>

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


恐怕这是不可能的,因为updateAll和deleteAll是唯一的原子方法,因此也是唯一可以使用这些字符串字段名引用的方法。我必须更正我之前的评论:deleteAll()在CakePHP 2.x中也不是原子的。只有updateAll()是。您可以检查下面的链接,这将为更多查询和所需的查询铺平道路-此外,如上所述的自动查询将始终正确递增。。。你的可能不会。是的,不是说它很有效。:)能否将字段调用返回的值强制转换为整数以确保增量?(在代码中编辑)问题在于它是非原子的,因此另一个进程可以在“查看”字段递增的同时递增该字段。。在过程中丢失一个增量。事实上,这是无效的(至少对我不起作用),我必须这样做:返回$this->updateAll([“hits\u count”=>$this->query()->newExpr(“hits\u count+1”),[“id in”=>$id]);