译Yii2-你需要知道的-3(Active Record)
2017-01-05
Yii What you need to known系列一共五篇,是几年前的文章。来源博客Hash Solutions,原文地址。 关于Yii介绍文章其实已经很多了,但是为了锻炼一下自己的英文水平、增强自己对Yii的整体认知影响,所以准备画蛇添足,翻译完这系列文章。 对于初学者或者想了解Yii的,我觉得Yii What you need to known系列应该是很不错的。
在我们探索Yii2框架系列的这一期,我们将详细介绍下这个强大框架的ActiveRecord
和数据库方面。
我们觉得这是Yii2在增强和添加新功能方面最出色的地方之一。
¶新的ActiveRecord
类的数据库支持
在Yii2中ActiveRecord
支持了很多新的数据库,包括基于NoSQL的。这些数据库包括elasticsearch
,Redis
,Sphinx search
,MongoDB
.
这是一个非常好的消息,因为我们在切换数据库时,不需要触碰我们的代码,因为我们的代码都是用ActiveRecord
和DB
去交互的。
¶在Yii2用ActiveRecord
来选择数据
你遇到的第一个主要变化将是model()
调用的消亡。现在所有的find
方法都来自于find()
或者findBySql()
。
用blog举个例子:Post::model()->findAll()
被Post::find()->all()
取代了。在从数据库选择纪录时,展现了
前所未有的灵活性,而且一旦我们习惯它,也非常直观。通过权威指南告诉我们如何使用Active Record
从数据库选择数据的代码,我们将可以更加
深刻的感受这种变化。
|
|
还有一些小捷径,这里有些函数可以替换掉Yii1.1的findByPk()
和find()
方法
|
|
¶关联关系(Relations)
过去使用relations()
,现在被返回ActiveRecord
对象的getter取代
|
|
这种关系依然可以使用$game->players
这种方式,但是现在你还可以自定义查询条件。例如:
|
|
¶其他
这还有很多微妙的变化,会使你再次热爱上这个框架。你可能也想用数组来保存从数据库获取的数据,因此可以节省内存。
现在可以使用asArray()
来实现:
|
|
当获取大量数据的时候,你会期望批量返回数据,以此使你的内存使用情况控制在内存限制范围以内。你在ActiveRecord
中依然可以使用这个技术
|
|
另外,Yii2现在支持嵌套事务,因此你不必担心事务是否已在当前调用堆栈中声明。
¶总结
这绝不是Yii2在ActiveRecord
所做改进和进步的详细列表。我们发现有些改变,相当的灵活和直接。
你可以让我们直到你的想法。对于良好的Angular2 Yii2项目结构,您可以访问链接的页面。
快速导航,其他文章链接: