译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项目结构,您可以访问链接的页面。
快速导航,其他文章链接: