有时候数据量大,需要有分表功能,不可能写多个model,尤其针对大量自动建表的时候,这个时候就需要写一个动态model。
先上重点部分代码
class Data extends \yii\db\ActiveRecord
{
public static $tablename = '';
public function __construct($table = '')
{
self::$tablename = "前缀_" . $table;
if($table != '') self::init_table();
parent::__construct();
}
public static function getDb()
{
return Yii::$app->db2;
}
/*
* 获取表名称
*/
public static function tableName()
{
return self::$tablename;
}
public static function init_table(){
$ta = self::getDb()->createCommand("SHOW TABLES LIKE '".self::tableName()."'")->queryAll();
if($ta==null)
{
self::$tablename = "前缀_";
/*
self::getDb()->createCommand("
创建表的sql语句
")->execute();
*/
}
}
......
}
在构造函数中初始化表名称,然后动态修改表名称。
由于表是动态创建,不确定表是否存在,可以有2个解决方法,先默认创建一个 “前缀_” 的表,如果表不存在就默认这个表。还一个方式就是表不存在就创建。都可以