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()方法时,只保存取出过的字段,其他字段被忽略。
相关文章推荐
- php的html_entity_decode函数
- [PHP]Yii2框架的坑
- rsa互通密钥对生成及互通加解密(c#,java,php)
- 提高php编程效率技巧
- php生成图片验证码-附五种验证码
- zend studio10.6.2没有PHP Include Path
- Laravel5 XX Model not found
- 黄聪:PHP json_encode中文乱码解决方法
- PHP扩展下载指导
- php02
- thinkphp框架中处理标签中条件输出
- php文件去重复,二维数组筛选
- laravel-soap 使用
- php生成图片验证码-附五种验证码
- Ubuntu下搭建tftp服务器最简单方法
- js把预定义的html字符串转换为 HTML 实体 htmlspecialchars 输出html实体内容包括标签,而不自动转义标签,只显示内容,类似php的htmlspecialchars
- PHP 网页调用本地exe程序实例
- PHP设计模式之装饰模式
- PHP生命周期
- php基础语法