【问题标题】:Yii2 model attribute without corresponding field in databaseYii2 模型属性在数据库中没有对应的字段
【发布时间】:2015-04-09 13:32:09
【问题描述】:

长话短说,我正在构建一些简单的审计功能,将数据库记录的先前值存储在审计表中。我使用“getOldAttributes”来查找被审计记录的所有数据库列的旧值。对于一个模型,我有另一个名为权限的属性(不作为数据库列存在),我想将其与其他 oldAttributes 一起存储。添加“公共 $permissions;”我的 ActiveRecord 类的顶部正在将数据从表单传递到模型中进行处理,但该属性不包含在 getOldAttributs 调用中。我已经阅读了有关使用 getter/setter 使该属性像常规 AR 属性一样工作的各种想法,但没有任何工作甚至真正有意义。

TLDR; AR 类具有我希望能够像所有其他数据库属性一样访问的公共属性(但实际上没有保存在数据库中)。

【问题讨论】:

    标签: yii2


    【解决方案1】:

    尝试覆盖 ActiveRecord 的 getAttributes() 方法:

    public function getAttributes($names = null, $except = [])
    {
        return array_merge(['permissions'], parent::getAttributes($names, $except));
    }
    

    【讨论】:

    • 我覆盖了 attributes() 而不是 getAttributes(),所以现在我的课程打开了以下内容: public $permissions;公共函数属性(){返回array_merge(['权限'],父::属性());然后我用“$this->setOldAttribute('permissions', 'oldValue'));”强行设置旧值这一切都有效(谢谢),但似乎应该有一种更简单的方法,特别是因为 attributes() 文档似乎表明只需将 $permissions 声明为 public 就足以使其“正常工作”。
    • 请注意,我必须使用 ['permissions' = null] 而不仅仅是 ['permissions'] 这似乎创建了权限值而不是键。
    猜你喜欢
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多