>我有以下数据库表
+----+---------+------+-------+
| id | title | code | views |
+----+---------+------+-------+
| 1 | Video 1 | abc | 1000 |
+----+---------+------+-------+
| 2 | Video 2 | def | 2000 |
+----+---------+------+-------+
| 3 | Video 3 | ghi | 3000 |
+----+---------+------+-------+
模型Videos.php
<?php
use PhalconMvcModel;
class Videos extends Model {
public $id;
public $title;
public $code;
public $views;
}
和控制器IndexController.php
<?php
use PhalconMvcController;
class IndexController extends Controller {
public function indexAction(){
$watch = Videos::findFirst(3);
// add +1 to video views
$watch->views = $watch->views + 1;
// update video data
$watch->save();
// output video data to view
$this->view->watch = $watch;
}
}
上面的代码应该在所选视频的观看次数中添加 +1,但始终添加 +2。
例如: 1000, 1002, 1004, 1006 ...
如果我运行原始 SQL,也会发生同样的事情。我做错了什么吗?
更新 #1
我激活了SQL查询日志,它同时运行2个查询,因此值重复,但我不知道为什么会这样。
在此链接中,建议 https://forum.phalconphp.com/discussion/274/model-save-create-two-records 检查具有主表但已经存在的表,即id字段。
响应的解决方案https://stackoverflow.com/a/35770447/2587280
发生此错误是因为 Phalcon 需要一个将所有请求重定向到 index.php
的.htaccess
文件。使用谷歌浏览器,默认情况下它会尝试从网站的根目录加载favicon.ico
文件,但由于该文件不存在,因此它被定向到再次加载的index.php
。
为了真正确定,我将我的 style.css 文件重命名为一个不存在的名称。未应用页面样式,Chrome 的检查未返回 404 错误,文件响应中是完整的index.php
代码。
为了解决这个问题,我添加了一个RewriteCond,验证该文件不是favicon.ico
Options -Indexes
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !favicon.ico
RewriteRule ^(.*)$ index.php?_url=$1 [L]
</IfModule>