按值递增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]);