有時候數據量大,需要有分表功能,不可能寫多個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個解決方法,先默認創建一個 “前綴_” 的表,如果表不存在就默認這個表。還一個方式就是表不存在就創建。都可以