您的位置:首页 > 编程语言 > PHP开发

Yii2框架的几个隐蔽地方

2015-08-19 18:16 441 查看
Yii2是一款优秀的通用Web后端框架,结构简单优雅、实用功能丰富、扩展性强、性能搞是他最突出的优点。它优秀的地方你在使用过程中总能轻易的发现,无须赘述。而这些隐蔽的小瑕疵,显得更有必要告诉大家。

ActiveRecord被莫名写入?

准备知识

ActiveRecord
的基本用法。如果不理解,可参考这里

代码现场

/**
* @property integer $id
* @property string $name
* @property string $detail
* @property double $price
* @property integer $area
**/
class OcRoom extends ActivieRecord
{
...
}

$room = OcRoom::find()      //先取出一个对象。
->select(['id'])        //只取出'id'列
->where(['id'=>20])
->one();
$room->save();              //保存,会发现此行的其它字段都被写成默认值了。


总结问题

这个例子的问题在于:

我从数据库中取出了一行,也就是代码中的
$room
,但是只取出了
id
字段,而其他字段自然就是默认值。
当我
$room->save()
的时候,那些是默认值的字段也被保存到数据库里去了。what!?
也就是说,当你想节约资源,不取出所有字段的时候,一定要注意不能保存,否则,很多数据会被莫名修改为默认值。

解决方法

然而,我们有什么解决办法呢?提供几种思路:

自己时刻注意,避免未完全取出的
ActiveRecord
的保存。
修改或继承
ActiveRecord
, 使得,当此对象由
find()
新建,且字段没有完全取出,调用
save()
方法,抛出异常。
修改或继承
ActiveRecord
,使得,当此对象由
find()
新建,且字段没有完全取出,调用
save()
方法时,只保存取出过的字段,其他字段被忽略。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: