在CakePHP中将行更新为1

时间:2014-12-30 11:19:36

标签: php mysql cakephp cakephp-appmodel cakephp-3.0

我搜索过这个问题并找到了许多类似的答案,如此

Update a row +1 in CakePHP

这就是接受的答案

  

$这 - >小窗口> updateAll(

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

      array('Widget.id' => 1)
     

);

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

  

$问题= $这 - > loadModel( '问题');

     

$问题 - > updateAll(

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

       array('questions.description' => $undashed_title)
     

);

每件事情都运行正常,查询正在执行但是当我检查调试器的sql日志时,这就是我发现的内容

  

更新问题SET questions.trend ='questions.trend + 1'WHERERE questions.description ='什么类型'

但我在数据库中的价值并没有像它应该的那样更新 (我说这是因为我也在phpmyadmin控制台上复制了这个查询并且它无法正常工作)

我相信查询应该是这样的

  

更新问题SET questions.trend = questions.trend + 1 WHERE questions.description ='What Type'

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

1 个答案:

答案 0 :(得分:4)

好吧,正如我在评论中所说的那样,CakePHP 3与value的{​​{1}}分歧,你想要做的增量是expression,以解决你的问题# 34;问题"你应该深入研究CakePHP文档,所以你会发现这个 http://book.cakephp.org/3.0/en/orm/saving-data.html#bulk-updates ,是的,正确的你想要的。所以,它变成了:

expression

请勿忘记使用// 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) ); 加载QueryExpression的命名空间。

  

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