【发布时间】:2012-11-25 10:47:54
【问题描述】:
Yii 1.1.12: 当我选择用户模型的一个实例时,我会获得某些属性/列的默认值。这发生在我最近(手动)添加到数据库中的列上:
$user->locale // returns null (= default value)
如果我在数据库中设置一个新的、不同的默认值(通过 phpMyAdmin),我将收到这个新的默认值。
该表的其他列也可以:
$user->email // returns the correct value
如果我运行 SQL 查询,我将收到正确的值:
SELECT locale FROM tbl_users WHERE tbl_users.id = :userID LIMIT 1
由此我推断数据库很好。问题一定出在 Active Records 实现中。
我希望 Yii 的 魔术方法 只需找到每个数据库列并将它们作为(虚拟)属性添加到模型中。这似乎正在发生,但不知何故插入了数据库列的默认值。
我做错了什么?
解决方案: 正如 Sam 建议的那样,删除 defaultScope() 就可以了。显然,AR 属性必须列在 defaultScope() 中才能被识别。或者,defaultScope() 可以完全删除。
【问题讨论】:
-
我们可以看到您添加/更新模型的代码吗?
-
本身也需要模型代码,尤其是
rules()方法。 -
代码和实例请看这里:essential-strategy.com/ar/bug
-
删除
defaultScope,不需要列出所有字段。 -
感谢 Sam,删除 defaultScope() 成功了。
标签: activerecord yii