在 CakePHP 中将一行更新为 1


Update a row by 1 in CakePHP

我搜索了这个问题,发现了许多类似的答案,就像这样

在 CakePHP 中更新一行 +1

这就是接受的答案的样子

$this->Widget->updateAll(

      array('Widget.numberfield' => 'Widget.numberfield + 1'),
      array('Widget.id' => 1)

);

现在我在 cakephp3 中使用此查询。这是我的样子

$Questions=$this->loadModel('Questions');

$Questions->更新全部(

       array('questions.trend' => 'questions.trend + 1'),
       array('questions.description' => $undashed_title)

);

一切都工作正常,查询正在执行,但是当我检查调试器以获取sql日志时,这是我发现的

更新问题 设置问题.趋势 = '问题.趋势 + 1' 其中 问题.描述 = '什么类型'

但是我在数据库中的值没有像应有的那样更新(我之所以这么说,是因为我也在phpmyadmin控制台上复制了此查询,但它不起作用)

我相信查询应该看起来像这样

更新问题 设置问题.趋势 = 问题.趋势+1 其中问题.描述 = "什么类型"

任何帮助将不胜感激,谢谢:)

好吧,正如我在评论中所说,CakePHP 3 与expression value相差一,您尝试做的增量事情是expression,为了解决您的"问题",您应该深入研究 CakePHP 文档,因此您会发现这 http://book.cakephp.org/3.0/en/orm/saving-data.html#bulk-updates,是的,正确的你想要的。所以,它变成了:

// load your beloved model
$questions = $this->loadModel('Questions');
// create a beauty expression
$expression = new QueryExpression('questions.trend + 1');
// execute a update with the beauty expression
$questions->updateAll(
   array('questions.trend' => $expression),
   array('questions.description' => $undashed_title)
);

并且不要忘记用use Cake'Database'Expression'QueryExpression;加载QueryExpression的命名空间。

<块引用类>

是的,这是在 CakePHP 3 上做错的方法,你应该使用 CakePHP 的 ORM,并将增量的东西移动到模型层。