yii2 實現一個model對應多個分表,寫一個動態model,對應多個表

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章