【问题标题】:Phalcon Model update not workingPhalcon 模型更新不起作用
【发布时间】:2016-08-15 22:58:57
【问题描述】:

这是我的模型:

class Users extends Model
{
    public $id;
    public $fname;
    public $lname;
    public $email;
    public $password;
    public $emailVerified;
    public $suspended;
}

现在我要去suspend一个用户...

                $user = Users::findFirst(
                                    array(
                                        'conditions' => "email=:email:",
                                        'bind' => array(
                                            'email' => $context->request->getPost("email")
                                        ))
                                );
                $user->suspended = 1;
                $user->save();

现在问题来了,更新用户数据后,suspended 字段按预期设置为1,但奇怪的是emailVerified 字段也更新了。现在两个字段都保存值:1

我不知道这是怎么回事。我搜索了互联网,但找不到类似的问题。我是不是做错了什么?

更新:

这是 mySQL 日志。我发现了问题。 Phalcon 查询生成器为 emailVerified 创建的值包含在单引号中。所以它是一个字符串,字段类型是bit

111 Query   

UPDATE `users` SET `fname` = 'user_fname', `lname` = 'user_lname', `email` = 'user_email', `emailVerified` = '0', `suspended` = 1 WHERE `id` = '3'

111 Quit    

【问题讨论】:

  • 您的用户模型中有 beforeValidation 或 beforeSave 方法吗?

标签: php mysql phalcon


【解决方案1】:

我不久前也遇到过这个问题。 Phalcon 似乎不支持bit 列。你应该改用tinyint

我还发现了一个closed issue '确认'这个。

【讨论】:

    【解决方案2】:

    我认为您的上述代码没有任何问题导致您看到的问题。我建议将您的数据库设置为转储所有 SQL 查询,并仔细检查您的数据库的默认值和可能会更改数据库本身内部值的函数。

    【讨论】:

    • 查询中为emailVerified 提供的值用单引号括起来。我认为这是问题所在,但我不知道如何解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2021-01-28
    • 2014-09-07
    相关资源
    最近更新 更多