我搜索过这个问题并找到了许多类似的答案,如此
这就是接受的答案
$这 - >小窗口> 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'
任何帮助将不胜感激,谢谢:)
答案 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,并将增量项移动到模型层。