使用phalcon框架更新/插入重复数据



>我有以下数据库表

+----+---------+------+-------+
| 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>

最新更新