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个解决方法,先默认创建一个 “前缀_” 的表,如果表不存在就默认这个表。还一个方式就是表不存在就创建。都可以

 

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