/**
* Returns the database connection used by this AR class.
* By default, the "db" application component is used as the database connection.
* You may override this method if you want to use a different database connection.
* @return Connection the database connection used by this AR class.
*/
public static function getDb()
{
return Yii:app->getDb();
}
追踪下去,最后会走yii2的ioc去创建名字叫做”db”的这个component返回给model层使用。
abstract class Application extends Module {
/**
* Returns the database connection component.
* @return \yii\db\Connection the database connection.
*/
public function getDb()
{
return $this->get('db');
}
yii2上述实现决定了只能连接了1台数据库服务器,选择了其中1个database,那么具体访问哪个表,是通过在Model里覆写tableName这个static方法实现的,ActiveRecord会基于覆写的tableName来决定表名是什么。
class OrderInfo extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
* @return
*/
public static function tableName()
{
return 'order_info';
}
2)1库N表:因为orderInfo数据量变大,各方面性能指标有所下降,而单机硬件性能还有较大冗余,于是可以考虑分多张order_info表,均摊数据量。假设我们要份8张表,那么可以依据uid(用户ID)%8来决定订单存储在哪个表里。
然而1库1表的时候,tableName()返回是的order_info,于是理所应当的重载这个函数,提供一种动态变化的能力即可,例如:
class OrderInfo extends \yii\db\ActiveRecord
{
private static $partitionIndex_ = null; // 分表ID